CRITICAL_SECTION
WinAPI (Windows API) içinde bir senkronizasyon nesnesidir ve çoklu iş parçacıklı programlarda kritik bölgelere erişimi kontrol etmek için kullanılır. Bu nesne, iş parçacıkları arasında karşılıklı dışlama (mutex) sağlamak için kullanılır.
CRITICAL_SECTION
kullanımı, InitializeCriticalSection
, EnterCriticalSection
, LeaveCriticalSection
ve DeleteCriticalSection
gibi işlevleri içerir. İş parçacıkları, kritik bölgeye (CRITICAL_SECTION
) girmek istediklerinde EnterCriticalSection
fonksiyonunu kullanır ve bu bölgeden çıktıklarında LeaveCriticalSection
fonksiyonunu kullanır. Kritik bölgeye giriş sırasında, başka bir iş parçacığının aynı kritik bölgeye girmesi engellenir (karşılıklı dışlama).
ÖRNEK KODU ;
#include <Windows.h> #include <iostream> CRITICAL_SECTION criticalSection; int globalVariable = 0; void ThreadFunction() { for (int i = 0; i < 100000; ++i) { EnterCriticalSection(&criticalSection); globalVariable++; LeaveCriticalSection(&criticalSection); } } int main() { // Kritik bölgeyi başlat InitializeCriticalSection(&criticalSection); // Thread'leri başlat HANDLE thread1 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFunction, NULL, 0, NULL); HANDLE thread2 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFunction, NULL, 0, NULL); // Thread'leri bekle WaitForSingleObject(thread1, INFINITE); WaitForSingleObject(thread2, INFINITE); // Kritik bölgeyi temizle DeleteCriticalSection(&criticalSection); std::cout << "Global Variable: " << globalVariable << std::endl; return 0; }