Verschil tussen Semaphore en Mutex

Semafoor versus Mutex

Semafoor is een gegevensstructuur die wordt gebruikt om ervoor te zorgen dat meerdere processen geen toegang hebben tot een gemeenschappelijke bron of een kritieke sectie op hetzelfde moment, in parallelle programmeeromgevingen. Semaforen worden gebruikt om dode lokken en raceomstandigheden te voorkomen. Mutex (Mutual Exclusion Object) wordt ook gebruikt om toegang tot een gemeenschappelijke bron op hetzelfde moment te voorkomen door verschillende gelijktijdige processen.

Wat is een semafoor?

Semafoor is een gegevensstructuur die wordt gebruikt om wederzijdse uitsluiting te bieden aan kritieke secties. Semaforen ondersteunen hoofdzakelijk twee bewerkingen die wachten (historisch bekend als P) en signaal (historisch bekend als V) worden genoemd. De wachtbewerking blokkeert een proces totdat de semafoor open is en de signaalbewerking toestaat dat een ander proces (thread) binnenkomt. Elke semafoor is geassocieerd met een rij wachtende processen. Wanneer de wachtbewerking door een thread wordt aangeroepen, kan de thread doorgaan als de semafoor open is. Als de semafoor gesloten is wanneer de wachtbewerking door een thread wordt aangeroepen, 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 wachten, wordt het signaal onthouden voor de volgende threads. Er zijn twee soorten semaforen, die mutex-semaforen worden genoemd en semaforen tellen. Mutex-semaforen maken één toegang tot een resource mogelijk en semaforen van getallen laten meerdere threads toe om toegang te krijgen tot een resource (waarvoor meerdere units beschikbaar zijn).

Wat is een Mutex?

Wanneer een computertoepassing wordt gestart, maakt deze een mutex en koppelt deze aan een bron. Wanneer de resource wordt gebruikt door een thread, is deze vergrendeld en kunnen andere threads deze niet gebruiken. Als een andere thread dezelfde resource wil gebruiken, moet deze een verzoek indienen. Vervolgens wordt die thread in een wachtrij geplaatst totdat de eerste thread is voltooid met de resource. Wanneer de eerste thread is voltooid met de resource, 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 ​​te wachten, krijgen ze toegang op een roterende basis. Praktisch gezien, wanneer de mutex de toegang tot een resource wisselt tussen verschillende threads, zal deze zichtbaar zijn omdat meerdere threads tegelijkertijd een resource verbruiken. Maar intern heeft slechts een enkele thread toegang tot de bron op een bepaald moment.

Wat is het verschil tussen Semaphore en Mutex?

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