Verschil tussen Semaphore en Mutex

Anonim

Semaphore vs Mutex

Semaphore is een data structuur die wordt gebruikt om ervoor te zorgen dat meerdere processen geen toegang krijgen tot een gemeenschappelijke bron of een kritische sectie tegelijkertijd, in parallelle programmeringsomgevingen. Semaforen worden gebruikt om doodsloten en raceomstandigheden te vermijden. Mutex (Mutual Exclusion Object) wordt ook gebruikt om tegelijkertijd toegang tot een gemeenschappelijke bron te voorkomen door meerdere gelijktijdige processen.

Wat is een semafoor ?

Semaphore is een datastructuur die wordt gebruikt om wederzijdse uitsluiting te geven aan kritieke secties. Semaphoren ondersteunen voornamelijk twee operaties genaamd wacht (historisch bekend als P) en signaal (historisch bekend als V). De wachtoperatie blokkeert een proces tot de semafoor geopend is en de signaaloperatie maakt het mogelijk om een ​​ander proces (draad) in te voeren. Elke semafoor is geassocieerd met een wachtrij van wachtprocessen. Wanneer de wachtoperatie door een draad wordt genoemd, als de semaphore open is, kan de draad doorgaan. Als de semafoor gesloten is wanneer de wachtoperatie door een draad wordt genoemd, wordt de draad geblokkeerd en moet het wachten in de wachtrij. De signaaloperatie opent een semafoor en als er een draad in de wachtrij staat, kan dat proces doorgaan en als er geen wielen in de wachtrij wachten, wordt het signaal onthouden voor de volgende draden. Er zijn twee soorten semaforen genaamd mutex semaforen en het tellen van semaforen. Mutex-semaforen toestaan ​​een enkele toegang tot een bron en het tellen van semaforen toestaan ​​dat meerdere threads toegang hebben tot een bron (die meerdere beschikbare eenheden heeft).

Wat is een Mutex?

Wanneer een computer applicatie wordt gestart, zal het een mutex maken en aan een bron koppelen. Wanneer de bron wordt gebruikt door een draad, is het vergrendeld en andere draden kunnen het niet gebruiken. Als een andere draad dezelfde bron wilt gebruiken, moet het een verzoek doen. Dan wordt die draad in een wachtrij geplaatst totdat de eerste draad klaar is met de bron. Wanneer de eerste draad klaar is met de bron, wordt de vergrendeling verwijderd en kan de draad die in de wachtrij wacht, toegang tot de bron krijgen. Als er meerdere threads in de wachtrij wachten, krijgen ze toegang op een roterende basis. In principe, wanneer de mutex de toegang tot een bron tussen verschillende draden vervangt, zal het zichtbaar zijn aangezien meerdere threads tegelijkertijd een bron verbruiken. Maar intern is slechts een enkele draad op een gegeven moment toegang tot de bron.

Wat is het verschil tussen Semaphore en Mutex?

Alhoewel zowel de semaforen en mutexobjecten gebruikt worden om wederzijdse uitsluiting in parallelle programmeringsomgevingen te bereiken, hebben ze wat verschillen. Een mutex object maakt alleen een enkele draad mogelijk om een ​​bron of een kritische sectie te verbruiken, terwijl semaforen een beperkt aantal gelijktijdige toegangen tot een bron (onder een maximaal toegelaten getal) toestaan.Met mutexobjecten moeten andere draden die toegang hebben tot de bron, wachten in een wachtrij totdat de huidige draad is afgerond met behulp van de bron.