Eşitleme Hakkında

Kaynağa erişimi eşitlemek için bekleme işlevlerinden birinde eşitleme nesnelerinden birini kullanın. Eşitleme nesnesinin durumu, ya sinyallenmiş ya da sinyallenmemiş olabilir. Bekleme işlevleri, belirtilen sinyalsiz bir nesne sinyalli duruma getirilene kadar bir iş parçacığının kendi çalışmasını engellemesine olanak tanır. Daha fazla bilgi için bkz. İşlemler Arası Eşitleme.

Doğru eşzamanlama mekanizmasını seçme

İlkel Scope Performance Yeniden girişli Ne zaman kullanılır?
İnce Okuyucu/Yazıcı (SRW) Kilidi Tek işlem Hızlı (genellikle kullanıcı modunda; çekişme durumunda çekirdek moduna geçebilir) Hayır Modern kodda okuyucu ağırlıklı iş yükleri için varsayılan seçenek. En düşük bellek kullanımı (işaretçi boyutunda).
Kritik Bölüm Tek işlem Hızlı (önce spin yapar, ardından çekirdek beklemesine geçer) Evet Tek bir işlem içinde yeniden giriş/özyinelemeli kilitlemeye ihtiyacınız olduğunda kullanın. SRW'den biraz daha büyük.
Mutex Çapraz işlem (adlandırılmış) Daha yavaş (her zaman çekirdek nesnesi) Evet Adlandırılmış mutex aracılığıyla süreçler arasında eşzamanlama için gereklidir. WaitForMultipleObjects ile de kullanışlıdır.
Semafor Çapraz işlem (adlandırılmış) Çekirdek nesnesi Mevcut Değil Bir kaynak havuzuna eşzamanlı erişimi sınırlar (örneğin, N öğelerinin bağlantı havuzu).
Etkinlik Çapraz işlem (adlandırılmış) Çekirdek nesnesi Mevcut Değil İş parçacıkları/işlemler arasında sinyal oluşturma. Verileri korumak için değil "bir şey oldu" bildirimleri için kullanın.
C++ std::mutex / std::shared_mutex Tek işlem Uygulama tanımlı Hayır Taşınabilir C++ kodu ve RAII için tercih edilir. Win32 bekleme API'lerine veya işlemler arası eşitlemeye ihtiyacınız olmadığında kullanın.

Note

SRW kilitleri ve Kritik Bölümler: Özyinelemeli kilitleme gerektirmeyen yeni kod için SRW kilitlerini (AcquireSRWLockExclusive/AcquireSRWLockShared) tercih edin. Bunlar daha küçüktür, daha hızlıdır ve okuyucu/yazar semantiğini destekler. Aynı iş parçacığı tarafından yeniden girişli (özyinelemeli) edinim gerektiğinde, kritik bölümler hâlâ uygun bir seçenektir.

Important

Yaygın hata: Kritik bölüm veya SRW kilidi yeterliyken işlem içi senkronizasyon için Mutex kullanılması. Mutexes her zaman bir çekirdek modu geçişi içerir ve bu da tek bir işlem içindeki yüksek frekanslı işlemler için önemli ölçüde yavaş olmalarını sağlar.

Diğer eşitleme mekanizmaları şunlardır:

Eşitleme hakkında ek bilgi için bkz. Eşitleme ve Çok İşlemcili Sorunlar.