Verschil tussen semaphore en monitor

Anonim

Semaphore vs Monitor

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. Monitor is een programmeertaalconstruct dat ook gebruikt wordt om meerdere processen te voorkomen die tegelijkertijd een gemeenschappelijke bron openen, waardoor de wederzijdse uitsluiting wordt gewaarborgd. Monitors gebruiken voorwaardelijke variabelen om deze taak te bereiken.

Wat is een Semaphore?

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 monitor?

Een monitor is een programmeertaalconstruct dat wordt gebruikt om toegang tot gedeelde gegevens te controleren. Monitoren inkapselen gedeelde datastructuren, procedures (die werken op gedeelde data structuren) en synchronisatie tussen gelijktijdige procedure invocaties. Een monitor zorgt ervoor dat zijn gegevens niet geconfronteerd worden met ongestructureerde toegangen en garandeert dat loopvlakken (welke toegangscontrole gegevens door zijn procedures) op een legitieme manier interactie hebben. Een monitor garandeert wederzijdse uitsluiting door slechts één draad toe te staan ​​om een ​​monitorprocedure op een gegeven moment uit te voeren. Als een andere draad een methode in de monitor probeert op te roepen, terwijl een draad al een procedure in de monitor uitvoert, wordt de tweede procedure geblokkeerd en moet het wachten in de wachtrij. Er zijn twee soorten monitoren genaamd Hoare monitoren en Mesa monitoren. Ze verschillen voornamelijk in hun scheduling semantiek.

Wat is het verschil tussen Semaphore en Monitor?

Alhoewel zowel de semaforen en monitors gebruikt worden om wederzijdse uitsluiting in parallelle programmeringsomgevingen te bereiken, verschillen ze in de technieken die gebruikt worden om deze taak te bereiken.In de monitoren is de code die wordt gebruikt om wederzijdse uitsluiting te bereiken, op een enkele plaats en is meer gestructureerd, terwijl de code voor semaforen wordt verdeeld als wacht- en signaalfunctieoproepen. Ook is het heel makkelijk om fouten te maken bij het uitvoeren van semaforen, terwijl er een zeer kleine kans is om fouten te maken bij het uitvoeren van monitors. Verder gebruiken monitoren conditievariabelen, terwijl semaforen het niet doen.