Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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:
- Çakışan giriş ve çıkış
- zaman uyumsuz işlem çağrıları
- kritik bölüm nesneleri
- koşul değişkenlerini
- ince okuyucu/yazıcı kilitler
- Tek seferlik başlatma
- kilitli değişken erişimi
- kilitli tek bağlantılı listeler
- zamanlayıcı kuyrukları
- MemoryBarrier makro
Eşitleme hakkında ek bilgi için bkz. Eşitleme ve Çok İşlemcili Sorunlar.