Przykładowy kod sekcji krytycznych z API Win32
/* Przykład C/C++, Windows, link do kernel32.dll */ #include <windows.h>
static CRITICAL_SECTION cs; /* To jest obiekt sekcji krytycznej – raz zainicjalizowany nie może być przesunięty w pamięci*/ /* Jeżeli programujesz w językach obiektowych, zadeklaruj to jako niestatyczną składową twojej klasy */
/* Zainicjalizuj sekcję krytyczną przed wejściem do wielowątkowego kontekstu */ InitializeCriticalSection(&cs);
void f() { /* Wejdź do sekcji krytycznej – inne wątki są zablokowane */ EnterCriticalSection(&cs);
/* Wykonaj trochę bezpiecznego przetwarzania*/
/*Opuść sekcję krytyczną – inne wątki mogą teraz EnterCriticalSection() */ LeaveCriticalSection(&cs); }
/* Uwolnij obiekt systemowy po zakończeniu wszystkiego – zwykle na końcu kodu czyszczącego */ DeleteCriticalSection(&cs); Należy zauważyć, że w Windowsie NT (nie 9x/ME), funkcja TryEnterCriticalSection() może być użyta do podjęcia próby wejścia do sekcji krytycznej. Ta funkcja zwraca wynik natychmiast, tak że wątek może robić inne rzeczy, jeśli nie uda mu się dostać do sekcji krytycznej (zwykle ze względu na to, że inny wątek ją zablokował). W bibliotece pthreads odpowiadającą funkcją jest pthread_mutex_trylock().