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
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.
Neden Listesi<T> iş parçacığı iç...
Neden bir dize ile gidiş-dönüş dönüştü...
Neden bu sınıfı, iş parçacığı güvenli ...
Ben've't parçacığı güvenli d...
Bir Yöntem iş Parçacığı için güvenli Y...