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.
Aşağıdaki örnekte, bir iş parçacığının kritik bölümünü nasıl başlatıp girdiği ve serbest bıraktığı gösterilmektedir. InitializeCriticalSectionAndSpinCount, EnterCriticalSection, LeaveCriticalSectionve DeleteCriticalSection işlevlerini kullanır.
Warning
Kilitlenme riski: bir iş parçacığının birden çok kritik bölüm alması gerekiyorsa, bunları her zaman tüm iş parçacıklarında tutarlı, belgelenmiş bir sırayla alın. Kilitlenmelerin en yaygın nedeni, kilitlerin farklı iş parçacıklarında farklı sıralarla alınmasıdır. Ayrıca, EnterCriticalSection işlevinin süresiz olarak engellediğini unutmayın — engellemesiz edinim denemeleri için TryEnterCriticalSection kullanın ve zaman sınırlı kilit edinimine ihtiyacınız varsa bir son süreyle sınırlı yeniden deneme döngüsü uygulayın.
Note
Modern C++ alternatifi: Yeni kod için, özel durumlar oluşsa bile kilidin serbest bırakılmasını sağlayan RAII tabanlı kilit yönetimi sunan std::mutex ile birlikte std::lock_guard veya std::scoped_lock (C++17) kullanmayı değerlendirin. Yoğun okumalı iş yükleri için İnce Okuyucu/Yazıcı (SRW) Kilitleri veya std::shared_mutexseçeneğini göz önünde bulundurun.
// Global variable
CRITICAL_SECTION CriticalSection;
int main( void )
{
...
// Initialize the critical section one time only.
if (!InitializeCriticalSectionAndSpinCount(&CriticalSection,
0x00000400) )
return;
...
// Release resources used by the critical section object.
DeleteCriticalSection(&CriticalSection);
}
DWORD WINAPI ThreadProc( LPVOID lpParameter )
{
...
// Request ownership of the critical section.
EnterCriticalSection(&CriticalSection);
// Access the shared resource.
// Release ownership of the critical section.
LeaveCriticalSection(&CriticalSection);
...
return 1;
}