Bir iş parçacığı tanımlamak için bir sayaç kullanıyorum bazı çok iş parçacıklı kodum var (Soru Windows API Thread Pool simple example soru).InterlockedIncrement vs EnterCriticalSection/counter ++/LeaveCriticalSection
Bu sayacı iş parçacığının geri çağırma işlevinde artırmak için bir InterlockedIncrement kullanmanız önerildi. Ancak bu, bazı eşzamanlılık sorunları ile karşılaştığımda, değişkeni düzgün bir şekilde kilitlemiyor gibi görünüyordu. InterlockedIncrement'ı el ile kritik bir bölüm kullanarak değiştirdim: EnterCriticalSection/counter ++/LeaveCriticalSection ve bu şimdi mükemmel çalışıyor.
Neden böyle? İki seçeneğin kesinlikle eşdeğer olması gerekmiyor mu? Not: Ben sadece bir çift (yaklaşık 10) iş parçacığı başlatılması hakkında konuşuyorum.
Bu şekilde, değişkeni düzgün bir şekilde kilitlemediniz mi? Hangi eşzamanlılık sorunları ile karşılaştınız? – LukeH
'InterlockedIncrement' ve arkadaşların kilitlenmesine gerek yoktur. Tek montaj talimatları gerçekleştirin. Gördüğünüz sorunlar hakkında daha açıklayıcı olabilir misiniz? – Nate
LukeH: sayaç her zaman tam olarak art arda ardışık bir tamsayı dizisi vermedi. Bazen, 0'dan başlayarak, sayaç yapıyordu: 0 1 2 2 4 5 ... – WhitAngl