Junior — Middle
Vysvětlete, čím se liší mechanismy Semaphore a Mutex v kontextu řízení přístupu ke zdrojům
sobes.tech AI
Odpověď od AI
Semaphore a Mutex jsou synchronizační mechanismy používané k řízení přístupu ke zdrojům, ale liší se účelem a chováním:
-
Mutex (vzájemné vyloučení) je primitivum, které umožňuje pouze jednomu vláknu vlastnit zdroj najednou. Zajišťuje exkluzivní přístup. Pokud vlákno uzamklo mutex, ostatní budou čekat, dokud nebude uvolněn.
-
Semaphore (čítač povolení) je obecnější mechanismus, který obsahuje čítač určující, kolik vláken může současně získat přístup ke zdroji. Například semaphore s počítadlem 3 umožní současně pracovat se zdrojem třem vláknům.
Příklad v C#:
// Mutex
Mutex mutex = new Mutex();
mutex.WaitOne(); // uzamknout mutex
// kritická sekce
mutex.ReleaseMutex(); // odemknout
// Semaphore
Semaphore semaphore = new Semaphore(3, 3); // maximálně 3 vlákna
semaphore.WaitOne(); // získat povolení
// kritická sekce
semaphore.Release(); // uvolnit povolení
Shrnutí:
- Mutex — pro exkluzivní přístup ke zdroji.
- Semaphore — pro omezení počtu současných přístupů.
Toto je klíčový rozdíl při výběru mechanismu synchronizace.