Semaphore vs Monitor
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. Monitor is een construct van een programmeertaal die ook wordt gebruikt om te voorkomen dat meerdere processen tegelijkertijd toegang krijgen tot een gemeenschappelijke bron en daarom wederzijdse uitsluiting garandeert. Monitoren gebruiken voorwaardelijke variabelen om deze taak te bereiken.
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 monitor?
Een monitor is een constructieve programmeertaal die wordt gebruikt om de toegang tot gedeelde gegevens te beheren. Monitoren kapselen gedeelde datastructuren in, procedures (die werken op gedeelde datastructuren) en synchronisatie tussen gelijktijdige procedureaanroepingen. Een monitor zorgt ervoor dat zijn gegevens niet worden geconfronteerd met ongestructureerde toegangen en garandeert dat loopvlakken (die toegang hebben tot monitorgegevens via de procedures) op een legitieme manier met elkaar in wisselwerking staan. Een monitor garandeert wederzijdse uitsluiting door slechts één thread toe te staan elke monitorprocedure op een bepaald moment uit te voeren. Als een andere thread probeert een methode op te roepen in de monitor, terwijl een thread al een procedure uitvoert op de monitor, wordt de tweede procedure geblokkeerd en moet deze in de wachtrij wachten. Er zijn twee soorten monitoren met de naam Hoare-monitoren en Mesa-monitoren. Ze verschillen voornamelijk in hun planningssemantiek.
Wat is het verschil tussen Semaphore en Monitor?
Hoewel beide semaforen en monitors worden gebruikt om wederzijdse uitsluiting te bereiken in parallelle programmeeromgevingen, verschillen ze in de technieken die worden gebruikt om deze taak te bereiken. In monitors bevindt de code die wordt gebruikt om wederzijdse uitsluiting te bereiken zich op één plaats en is meer gestructureerd, terwijl code voor semaforen wordt gedistribueerd als wacht- en signaalfunctieoproepen. Het is ook heel gemakkelijk om fouten te maken bij het implementeren van semaforen, terwijl er een zeer kleine kans is om fouten te maken bij het implementeren van monitors. Verder gebruiken monitors gebruiksvariabelen, terwijl semaforen dat niet doen.