Verschil tussen semafoor en mutex

Verschil tussen semafoor en mutex
Verschil tussen semafoor en mutex

Video: Verschil tussen semafoor en mutex

Video: Verschil tussen semafoor en mutex
Video: Wat is het verschil tussen jachtluipaarden en luipaarden? │Ranger Request 2024, Juli-
Anonim

Semaphore vs Mutex

Semaphore is een gegevensstructuur die wordt gebruikt om ervoor te zorgen dat meerdere processen niet tegelijkertijd toegang hebben tot een gemeenschappelijke bron of een kritieke sectie in parallelle programmeeromgevingen. Semaforen worden gebruikt om deadlocks en race-omstandigheden te vermijden. Mutex (Mutual Exclusion Object) wordt ook gebruikt om te voorkomen dat meerdere gelijktijdige processen tegelijkertijd toegang krijgen tot een gemeenschappelijke bron.

Wat is een semafoor?

Semaphore is een gegevensstructuur die wordt gebruikt om kritieke secties wederzijds uit te sluiten. Semaforen ondersteunen voornamelijk twee bewerkingen genaamd wachten (van oudsher bekend als P) en signaal (van oudsher bekend als V). De wachtbewerking blokkeert een proces totdat de semafoor open is en de signaalbewerking laat een ander proces (draad) toe. Elke semafoor is gekoppeld aan een wachtrij van wachtende processen. Wanneer de wachtbewerking wordt aangeroepen door een thread, en de semafoor open is, kan de thread doorgaan. Als de semafoor wordt gesloten wanneer de wachtbewerking wordt aangeroepen door een thread, wordt de thread geblokkeerd en moet deze in de wachtrij wachten. De signaalbewerking opent een semafoor en als er al een thread in de wachtrij staat, mag dat proces doorgaan en als er geen threads in de wachtrij staan, wordt het signaal onthouden voor de volgende threads. Er zijn twee soorten semaforen die mutex-semaforen worden genoemd en semaforen tellen. Mutex-semaforen geven een enkele toegang tot een bron en het tellen van semaforen geven meerdere threads toegang tot een bron (die meerdere eenheden beschikbaar heeft).

Wat is een Mutex?

Wanneer een computertoepassing wordt gestart, zal deze een mutex maken en deze aan een bron koppelen. Wanneer de bron door een thread wordt gebruikt, is deze vergrendeld en kunnen andere threads deze niet gebruiken. Als een andere thread dezelfde bron wil gebruiken, moet deze een verzoek indienen. Vervolgens wordt die thread in een wachtrij geplaatst totdat de eerste thread met de resource is voltooid. Wanneer de eerste thread met de resource is voltooid, wordt de vergrendeling verwijderd en kan de thread die in de wachtrij staat, toegang krijgen tot de resource. Als er meerdere threads in de wachtrij staan, krijgen ze roulerend toegang. Praktisch, wanneer de mutex de toegang tot een bron tussen verschillende threads afwisselt, zal dit zichtbaar zijn omdat meerdere threads tegelijkertijd een bron gebruiken. Maar intern heeft slechts één enkele thread op een bepaald moment toegang tot de bron.

Wat is het verschil tussen Semaphore en Mutex?

Hoewel zowel de semaforen als de mutex-objecten worden gebruikt om wederzijdse uitsluiting te bereiken in parallelle programmeeromgevingen, hebben ze enkele verschillen. Een mutex-object staat slechts een enkele thread toe om een bron of een kritieke sectie te gebruiken, terwijl semaforen een beperkt aantal gelijktijdige toegangen tot een bron toestaan (onder een maximaal toegestaan aantal). Met mutex-objecten moeten andere threads die toegang willen tot de bron, in een wachtrij wachten totdat de huidige thread klaar is met het gebruik van de bron.

Aanbevolen: