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