Diferența dintre semafor și monitor

Diferența dintre semafor și monitor
Diferența dintre semafor și monitor

Video: Diferența dintre semafor și monitor

Video: Diferența dintre semafor și monitor
Video: Linux Boot Process: Grub, initrd, explained. 2024, Iulie
Anonim

Semafor vs Monitor

Semaforul este o structură de date care este utilizată pentru a se asigura că mai multe procese nu accesează o resursă comună sau o secțiune critică în același timp, în medii de programare paralele. Semaforele sunt folosite pentru a evita blocajele și condițiile de cursă. Monitorul este un limbaj de programare care este, de asemenea, folosit pentru a evita accesul mai multor procese la o resursă comună în același timp, prin urmare, garantează excluderea reciprocă. Monitorii folosesc variabile condiționate pentru a realiza această sarcină.

Ce este un semafor?

Semaforul este o structură de date care este utilizată pentru a oferi excluderea reciprocă a secțiunilor critice. Semaforele suportă în principal două operațiuni numite așteptare (cunoscută istoric ca P) și semnal (cunoscută istoric ca V). Operația de așteptare blochează un proces până când semaforul este deschis și operația de semnal permite intrarea unui alt proces (thread). Fiecare semafor este asociat cu o coadă de procese de așteptare. Când operația de așteptare este apelată de un fir, dacă semaforul este deschis, firul poate continua. Dacă semaforul este închis când operația de așteptare este apelată de un fir de execuție, firul de execuție este blocat și trebuie să aștepte în coadă. Operația de semnal deschide un semafor și dacă există deja un fir de execuție care așteaptă deja în coadă, acel proces este permis să continue, iar dacă nu există fire care așteaptă în coadă, semnalul este reținut pentru următoarele fire. Există două tipuri de semafore numite semafore mutex și semafore de numărare. Semaforele Mutex permit un singur acces la o resursă, iar semaforele de numărare permit mai multor fire de execuție să acceseze o resursă (care are mai multe unități disponibile).

Ce este un monitor?

Un monitor este un limbaj de programare care este folosit pentru a controla accesul la datele partajate. Monitoarele încapsulează structuri de date partajate, proceduri (care operează pe structuri de date partajate) și sincronizarea între invocări de proceduri concurente. Un monitor se asigură că datele sale nu se confruntă cu accesări nestructurate și garantează că treadurile (care accesează datele monitorului prin procedurile sale) interacționează într-un mod legitim. Un monitor garantează excluderea reciprocă, permițând unui singur fir să execute orice procedură de monitorizare la un moment dat. Dacă un alt thread încearcă să invoce o metodă în monitor, în timp ce un thread execută deja o procedură în monitor, atunci a doua procedură este blocată și trebuie să aștepte în coadă. Există două tipuri de monitoare numite monitoare Hoare și monitoare Mesa. Ele diferă în principal în ceea ce privește semantica de planificare.

Care este diferența dintre semafor și monitor?

Chiar dacă atât semaforele, cât și monitoarele sunt folosite pentru a obține excluderea reciprocă în medii de programare paralelă, ele diferă în tehnicile utilizate pentru realizarea acestei sarcini. În monitoare, codul care este folosit pentru a obține excluderea reciprocă este într-un singur loc și este mai structurat, în timp ce codul pentru semafoare este distribuit ca apeluri de funcție de așteptare și semnal. De asemenea, este foarte ușor să faci greșeli atunci când implementezi semafoare, în timp ce există foarte puține șanse să faci greșeli atunci când implementezi monitoare. În plus, monitoarele folosesc variabile de condiție, în timp ce semaforele nu.

Recomandat: