Diferența de bază între semaphore și mutex este că semaforul este un mecanism de semnalizare, adică procesele efectuează operația de așteptare () și semnal () pentru a indica dacă acestea achiziționează sau eliberează resursele, în timp ce Mutex este mecanismul de blocare, procesul trebuie să achiziționeze blocarea obiect mutex dacă dorește să achiziționeze resursa. Există mai multe diferențe între semafor și mutex, să le discutăm cu ajutorul diagramei de comparație de mai jos.
Diagramă de comparație
Bazele comparației | Semafor | mutex |
---|---|---|
De bază | Semaphore este un mecanism de semnalizare. | Mutexul este un mecanism de blocare. |
Existenţă | Semaphore este o variabilă întreg. | Mutexul este un obiect. |
Funcţie | Semaphore permite mai multor fire de program să acceseze o instanță finită de resurse. | Mutex permite mai multor fire de program să acceseze o singură resursă, dar nu simultan. |
Proprietate | Valoarea semaphore poate fi modificată prin orice proces de achiziționare sau eliberare a resursei. | Blocarea obiectului Mutex este eliberată numai de procesul care a obținut blocarea pe acesta. |
categorisi | Semaphorele pot fi clasificate în contorizarea semaforului și a semaforului binar. | Mutex nu este clasificat în continuare. |
operație | Valoarea Semaphore este modificată cu ajutorul funcției de așteptare () și de semnal (). | Obiectul Mutex este blocat sau deblocat prin procesul care solicită sau eliberează resursa. |
Resurse Ocupate | Dacă se utilizează toate resursele, procesul care solicită resursă efectuează operația wait () și se blochează până când numărul semaforului devine mai mare decât unul. | Dacă un obiect mutex este deja blocat, procesul de solicitare a resurselor așteaptă și se află în așteptare de către sistem până la eliberarea blocării. |
Definiția Semaphore
Semaphore este un instrument de sincronizare a proceselor. Semaphore este de obicei o variabilă întregă S care este inițializată la numărul de resurse prezente în sistem, iar valoarea semaforului poate fi modificată numai de două funcții așteptați () și semnați () în afară de inițializare.
Funcția de așteptare () și semnal () modifică valoarea semaforului indivizibil . Aceasta înseamnă că atunci când un proces modifică valoarea semaforului, nici un alt proces nu poate modifica simultan valoarea semaforului. Semaphorele se disting prin sistemul de operare în două categorii: numărarea semaforilor și a semaforului binar .
În contorizarea Semaphore, valoarea semaforului S este inițializată la numărul de resurse s prezente în sistem. Ori de câte ori un proces dorește să acceseze resursa, efectuează operația wait () pe semafor și scade valoarea semaforului cu una. Când eliberează resursa, efectuează operația semnal () pe semafor și mărește valoarea semaforului cu una. Când numărul semaforului ajunge la 0, înseamnă că toate resursele sunt ocupate de procese. Dacă un proces are nevoie să utilizeze o resursă atunci când numărul semaforului este 0, execută așteptați () și blocați până când valoarea semaforului devine mai mare de 0.
În semafor binar, valoarea semaphore variază între 0 și 1 . Este similar cu blocarea mutex, dar mutexul este un mecanism de blocare, în timp ce semaforul este un mecanism de semnalizare. În semafor binar, dacă un proces dorește să acceseze resursa, efectuează operația wait () pe semafor și scade valoarea semaforului de la 1 la 0. Când eliberează resursa, efectuează o operație de semnal () pe semafor și incremente valoarea sa la 1. Dacă valoarea semaforului este 0 și un proces dorește să acceseze resursa, efectuează operația wait () și se blochează până când procesul curent care utilizează resursele eliberează resursa.
Definiția Mutex
Obiectul de excludere mutuală este numit în scurt timp ca Mutex. Din termenul de excludere reciprocă, putem înțelege că numai un singur proces poate avea acces la resursa dată. Obiectul mutex permite fișierelor multiple de program să utilizeze aceeași resursă, dar nu una simultan.
Când un program pornește, cereți sistemului să creeze un obiect mutex pentru o anumită resursă. Sistemul creează obiectul mutex cu un nume sau ID unic. Ori de câte ori firul de program dorește să utilizeze resursa pe care o ocupă în blocarea obiectului mutex, utilizează resursa și, după utilizare, eliberează blocarea pe obiectul mutex. Apoi, următorul proces este permis să achiziționeze blocarea pe obiectul mutex.
Între timp, un proces a dobândit blocarea pe obiectul mutex, niciun alt fir / proces nu poate accesa acea resursă. Dacă obiectul mutex este deja blocat, procesul care dorește să obțină blocarea pe obiectul mutex trebuie să aștepte și este așteptat de sistem până când obiectul mutex este deblocat.
Diferențe cheie între Semaphore și Mutex
- Semaphore este un mecanism de semnalizare, deoarece funcția de așteptare () și semnal () efectuată pe variabila semafor indică dacă un proces este achiziția resursei sau eliberarea resursei. Pe celelalte mâini, mutexul este un mecanism de blocare, pentru a obține o resursă, un proces trebuie să blocheze obiectul mutex și în timp ce eliberarea unui proces de resurse trebuie să deblocheze obiectul mutex.
- Semaphore este de obicei o variabilă întreagă, în timp ce mutexul este un obiect .
- Semaphore permite mai multor fire de program să acceseze instanța finită a resurselor . Pe celelalte mâini, Mutex permite mai multor fire de program să acceseze o singură resursă partajată, dar una câte una.
- Valoarea variabilă semaphore poate fi modificată prin orice proces care achiziționează sau eliberează resurse prin efectuarea operațiilor de așteptare () și semnal (). Pe celelalte mâini, blocarea obținută pe obiectul mutex poate fi eliberată numai prin procesul care a dobândit blocarea pe obiectul mutex.
- Semaphorele sunt de două tipuri care numără semafor și semafor binar, care este destul de similar cu mutexul.
- Valoarea variabilă a semaphorelor este modificată prin operația de așteptare () și de semnal (), în afară de inițializare. Cu toate acestea, obiectul mut este blocat sau deblocat prin procesul de achiziție sau eliberare a resursei.
- Dacă toate resursele sunt achiziționate de proces și nici o resursă nu este liberă, procesul care dorește să achiziționeze resurse execută operația wait () la variabila semaforului și se blochează până când numărul semaforului devine mai mare decât 0. Dar dacă un obiect mutex este deja blocat atunci procesul care dorește să achiziționeze resurse așteaptă și să intre în coadă de sistem până când resursele sunt eliberate și obiectul mutex este deblocat.
Concluzie:
Semaphore este o opțiune mai bună în cazul în care există mai multe exemple de resurse disponibile. În cazul unui singur mutex de resurse partajate este o alegere mai bună.