Wat is het verschil tussen een semaphore en een mutex?
sobes.tech AI
Antwoord van AI
Een mutex (Mutual Exclusion) is een synchronisatie-mechanisme dat garandeert dat op elk moment slechts één thread toegang heeft tot de kritieke sectie van de code of een resource. Het werkt volgens het eigendomsprincipe: de thread die de mutex blokkeert, moet deze ook vrijgeven.
Een semaphore (Semaphore) is een meer algemeen synchronisatie-mechanisme dat de toegang tot een resource beperkt tot een bepaald aantal "toestemmingen". Threads kunnen toestemming krijgen als deze beschikbaar is en doorgaan met uitvoeren. Wanneer de resource niet meer nodig is, wordt de toestemming teruggegeven. Semaphore heeft geen eigendomsconcept; elke thread kan de teller van de semaphore verhogen.
Belangrijke verschillen:
- Doel: Mutex wordt gebruikt voor exclusieve toegang (één thread), semaphore voor het beheren van toegang tot een beperkte pool van resources (meerdere threads tot aan de limiet).
- Eigendom: Mutex heeft een eigenaar (de thread die het heeft geblokkeerd). Semaphore heeft geen eigenaar.
- Teller: Mutex kan worden beschouwd als een semaphore met een teller gelijk aan 1. Semaphore kan een teller groter dan 1 hebben.
- Operaties: Mutex:
WaitOne/Pulse/ReleaseMutex. Semaphore:WaitOne/Release.
Hier is een eenvoudig voorbeeld van het gebruik van een semaphore in C#:
// Maak een semaphore met een initiële waarde van 2 en een maximum van 2.
// Hiermee kunnen tegelijkertijd 2 threads toegang krijgen tot de resource.
SemaphoreSlim semaphore = new SemaphoreSlim(2, 2);
// Thread probeert toegang te krijgen tot de resource
semaphore.WaitOne();
// ... werken met de resource ...
semaphore.Release(); // Vrijgeven van toestemming
Voorbeeld van een mutex:
// Maak een mutex
Mutex mutex = new Mutex();
// Thread probeert exclusieve toegang te krijgen
mutex.WaitOne();
// ... werken met de kritieke sectie ...
mutex.ReleaseMutex(); // Mutex vrijgeven (alleen de eigenaar kan)