Junior — Middle
Wyjaśnij, czym różnią się mechanizmy Semaphore i Mutex w kontekście zarządzania dostępem do zasobów
sobes.tech AI
Odpowiedź od AI
Semaphore i Mutex to mechanizmy synchronizacji używane do zarządzania dostępem do zasobów, ale różnią się przeznaczeniem i zachowaniem:
-
Mutex (wzajemne wykluczanie) to prymityw, który pozwala na jednoczesne posiadanie zasobu tylko przez jeden wątek. Zapewnia dostęp wyłączny. Jeśli wątek zablokował mutex, inne będą czekać, aż zostanie odblokowany.
-
Semaphore (licznik zezwoleń) to bardziej ogólny mechanizm, który zawiera licznik określający, ile wątków może jednocześnie uzyskać dostęp do zasobu. Na przykład, semaphore z licznikiem 3 pozwoli na jednoczesną pracę trzech wątków z zasobem.
Przykład w C#:
// Mutex
Mutex mutex = new Mutex();
mutex.WaitOne(); // zablokuj mutex
// sekcja krytyczna
mutex.ReleaseMutex(); // odblokuj
// Semaphore
Semaphore semaphore = new Semaphore(3, 3); // maksymalnie 3 wątki
semaphore.WaitOne(); // zdobądź zezwolenie
// sekcja krytyczna
semaphore.Release(); // zwolnij zezwolenie
Podsumowując:
- Mutex — do wyłącznego dostępu do zasobu.
- Semaphore — do ograniczenia liczby jednoczesnych dostępów.
To kluczowa różnica przy wyborze mechanizmu synchronizacji.