Junior — Middle
Czym różnią się mechanizmy wzajemnego wykluczania Lock i Semaphore w zarządzaniu dostępem do zasobów?
sobes.tech AI
Odpowiedź od AI
Lock (wyłącznik wzajemny) i Semaphore (semafor) to mechanizmy synchronizacji, ale różnią się funkcjonalnością i zastosowaniem:
-
Lock (Mutex)
- Zaprojektowany do zapewnienia wyłącznego dostępu do zasobu.
- Tylko jeden wątek może posiadać Lock w danym momencie.
- Jeśli Lock jest zajęty, inne wątki czekają na jego zwolnienie.
- Używany do ochrony sekcji krytycznych.
-
Semaphore
- Ma licznik, który określa, ile wątków może jednocześnie uzyskać dostęp do zasobu.
- Może zezwalać na dostęp wielu wątkom jednocześnie (np. semafor z licznikiem 3 pozwala 3 wątkom na dostęp jednocześnie).
- Używany do zarządzania dostępem do ograniczonych zasobów.
Przykład w C#:
// Mutex
Mutex mutex = new Mutex();
mutex.WaitOne(); // przejęcie
// sekcja krytyczna
mutex.ReleaseMutex(); // zwolnienie
// Semaphore
Semaphore semaphore = new Semaphore(3, 3); // maksymalnie 3 jednoczesne dostępy
semaphore.WaitOne();
// praca z zasobem
semaphore.Release();
W związku z tym, Lock jest szczególnym przypadkiem semafora z maksymalnym licznikiem 1.