Sobes.tech
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.