SORU
25 EKİM 2013, Cuma


Bu iş Parçacığı için Güvenli değil mi?

Kontrol ediliyor... _count güvenli, değil mi erişiliyor?

Her iki yöntem birden çok iş parçacığı tarafından erişilen.

private int _count;

public void CheckForWork() {
    if (_count >= MAXIMUM) return;
    Interlocked.Increment(ref _count);
    Task t = Task.Run(() => Work());
    t.ContinueWith(CompletedWorkHandler);
}

public void CompletedWorkHandler(Task completedTask) {
    Interlocked.Decrement(ref _count);
    // Handle errors, etc...
}

CEVAP
25 EKİM 2013, Cuma


Bu iş parçacığı güvenli değil mi?

Sanırım en fazla bir, Kont sıfır, beş iş parçacığı CheckForWork arayın.

Tüm beş iş parçacığı sayısı en fazla daha az olduğunu doğrulayın. Tezgahın sonra beş ve beş iş başlayacaktı çarpmış olurdu.

Kod niyeti aykırı gibi görünüyor.

Ayrıca: alanı değil, kalıcı değildir. Ne mekanizması herhangi bir iş parçacığı-bellek-hiç bir engel yolunda güncel bir değeri okumak garanti eder? Hiçbir şey garanti! Sadece eğer koşul yanlışsa bellek engel olun.

Daha genel olarak: burada yanlış bir ekonomi yapıyoruz. Düşük bir kilit çözümü ile giderek uncontended kilit alacağını düzine nanosaniye kaydediyorsunuz.Sadece kilit al. Ekstra düzine nanosaniye gelemez.

Ve hatta daha genel olarak:bir CPU düşük kilidi yolları üzerinde gerçekleştirmek için izin verilen işlemci mimarisi üzerine uzman değilseniz düşük-şifre yazmayın ve tüm en iyi duruma getirme. Bu kadar uzman değil. Değilim. Bu yüzdenDüşük-kilit kodu yazmak istemiyorum.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Miles Fisher

    Miles Fisher

    8 NİSAN 2009
  • UnboxTechnology

    UnboxTechnol

    20 Ocak 2011
  • WK

    WK

    9 Ocak 2006