Verschil tussen semafoor en monitor

Verschil tussen semafoor en monitor
Verschil tussen semafoor en monitor

Video: Verschil tussen semafoor en monitor

Video: Verschil tussen semafoor en monitor
Video: Linux Boot Process: Grub, initrd, explained. 2024, November
Anonim

Semaphore vs Monitor

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. Monitor is een programmeertaalconstructie die ook wordt gebruikt om te voorkomen dat meerdere processen tegelijkertijd toegang hebben tot een gemeenschappelijke bron en daarom wederzijdse uitsluiting garandeert. Monitors gebruiken voorwaardelijke variabelen om deze taak te volbrengen.

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

Een monitor is een programmeertaalconstructie die wordt gebruikt om de toegang tot gedeelde gegevens te regelen. Monitoren kapselen gedeelde datastructuren, procedures (die werken op gedeelde datastructuren) en synchronisatie tussen gelijktijdige procedureaanroepen in. Een monitor zorgt ervoor dat zijn gegevens niet worden geconfronteerd met ongestructureerde toegangen en garandeert dat loopvlakken (die toegang krijgen tot de gegevens van de monitor via zijn procedures) op een legitieme manier met elkaar omgaan. Een monitor garandeert wederzijdse uitsluiting door slechts één thread toe te staan een monitorprocedure op een bepaald moment uit te voeren. Als een andere thread een methode in de monitor probeert aan te roepen, terwijl een thread al een procedure in de monitor uitvoert, wordt de tweede procedure geblokkeerd en moet deze in de wachtrij wachten. Er zijn twee soorten monitoren, Hoare-monitoren en Mesa-monitoren. Ze verschillen voornamelijk in hun planningssemantiek.

Wat is het verschil tussen Semaphore en Monitor?

Hoewel zowel de semaforen als de monitoren worden gebruikt om wederzijdse uitsluiting te bereiken in parallelle programmeeromgevingen, verschillen ze in de technieken die worden gebruikt om deze taak te volbrengen. In monitors bevindt de code die wordt gebruikt om wederzijdse uitsluiting te bereiken zich op één plek en is meer gestructureerd, terwijl code voor semaforen wordt gedistribueerd als wacht- en signaalfunctie-aanroepen. 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 monitoren. Verder gebruiken monitors conditievariabelen, terwijl semaforen dat niet doen.

Aanbevolen: