Mutex vs Semaphore – Diferența dintre ei
Diferența cheie între Mutex și Semaphore
- Mutex este un mecanism de blocare, în timp ce Semaphore este un mecanism de semnalizare
- Mutex este doar un obiect, în timp ce Semaphore este un număr întreg
- Mutex nu are subtip, în timp ce semaforul are două tipuri: semaforul de numărare și semaforul binar.
- Semaphore acceptă modificarea operațiunilor de așteptare și semnal, în timp ce Mutex este modificat doar de procesul care poate solicita sau elibera o resursă.
- Semaphore valoarea este modificată utilizând operațiile așteptare () și semnal (), pe de altă parte, operațiunile Mutex sunt blocate sau deblocate.

Aici, am analizat diferența dintre Mutex și Semaphore și le va evalua cuprinzător avantajele și dezavantajele.
Fapte comune despre Mutex și Semaphore
Ținând din practica mea, iată câteva fapte comune despre Mutex vs Semaphore:
- O singură sarcină poate obține mutexul. Astfel, un mutex are proprietatea și numai proprietarul îl poate elibera.
- Motivele pentru utilizarea mutexului și a semaforului sunt diferite, poate din cauza similitudinii în implementarea lor, un mutex ar fi denumit semafor binar.
- O concepție greșită foarte cunoscută este că Mutex și Semaphores sunt aproape aceleași, singura diferență fiind că un Mutex este capabil să numere până la 1, în timp ce Semaphoreeste capabil să numere de la 0 la N.
- Există întotdeauna incertitudine între semafor binar și mutex. S-ar putea să auzi că un mutex este un semafor binar, ceea ce nu este corect.
Ce este a Semaphore?
Un semafor este pur și simplu o variabilă care este nenegativă și partajată între fire. Un semafor este un mecanism de semnalizare, iar un fir care așteaptă pe un semafor poate fi semnalat de un alt fir. Utilizează două operații atomice, 1) așteptare și 2) semnal pentru sincronizarea proceselor.
A semafor fie permite sau interzice accesul la resursă, care depinde de modul în care este configurată.
Utilizarea de Semaphore
În cazul unui singur buffer, putem separa bufferul de 4 KB în patru buffer-uri de 1 KB. Semaphore pot fi asociate cu aceste patru tampoane. Acest lucru permite utilizatorilor și producătorilor să lucreze pe diferite buffere în același timp.
Avantajele Semaphore
În practica mea, iată principalele aspecte pozitive ale utilizării semaforului:
- Permite mai multor fire să acceseze secțiunea critică
- Semaphores sunt independente de mașină.
- Semaphores sunt implementate în codul independent de mașină al microkernel-ului.
- Ele nu permit intrarea mai multor procese în secțiunea critică.
- Deoarece există un program de așteptare încărcat în semafor, nu există niciodată o pierdere de timp și resurse de proces.
- Sunt independente de mașină, care ar trebui să fie rulate în codul independent de mașină al microkernel-ului.
- Acestea permit gestionarea flexibilă a resurselor.
Dezavantaje ale Semaphores
Iată care sunt dezavantajele semaforului pe care le-am întâlnit.
- Una dintre cele mai mari limitări ale unui semafor este inversarea priorității.
- Sistemul de operare trebuie să țină evidența tuturor apelurilor pentru a aștepta și a semnala semaforul.
- Utilizarea lor nu este niciodată impusă, dar este doar prin convenție.
- Pentru a evita blocajele în semafor, Wait și Signal operațiunile trebuie să fie executate în ordinea corectă.
- Semaphore programarea este o metodă complexă, deci există șanse să nu se realizeze excluderea reciprocă.
- De asemenea, nu este o metodă practică pentru utilizarea pe scară largă, deoarece utilizarea lor duce la pierderea modularității.
- Semaphore este mai predispus la erori de programator.
- Poate cauza impas sau încălcarea excluderii reciproce din cauza erorii programatorului.
Ce este Mutex?
Forma completă a Mutex este Mutual Exclusion Object. Este un tip special de semafor binar care este folosit pentru controlul accesului la resursa partajată. Include un mecanism de moștenire a priorităților pentru a evita problemele de inversare a priorității extinse. Permite ca sarcinile curente cu prioritate mai mare să fie menținute în starea blocată pentru cel mai scurt timp posibil. Totuși, moștenirea priorităților nu corectează inversarea priorității, ci doar minimizează efectul acesteia.
Utilizarea Mutex
Un mutex oferă excluderea reciprocă, care poate fi fie producător, fie consumator care poate avea cheia (mutex) și poate continua cu munca lor. Atâta timp cât producătorul umple tamponul, utilizatorul trebuie să aștepte și invers. În blocarea Mutex, tot timpul, doar un singur fir poate funcționa cu întregul buffer.
Avantajele Mutex
Din ceea ce am observat, iată care sunt beneficiile cheie ale Mutex:
- Mutexurile sunt doar simple blocări obținute înainte de a intra în secțiunea sa critică și apoi de a o elibera.
- Deoarece un singur fir se află în secțiunea sa critică la un moment dat, nu există condiții de cursă, iar datele rămân întotdeauna consistente.
Dezavantajele Mutex
În practica mea, am identificat câteva dezavantaje ale lui Mutex.
- Dacă un fir de execuție obține o blocare și intră în stare de repaus sau este preemptat, este posibil ca celălalt fir să nu poată avansa. Acest lucru poate duce la foame.
- Nu poate fi blocat sau deblocat dintr-un context diferit de cel care l-a achiziționat.
- În secțiunea critică ar trebui permisă un singur fir o dată.
- Implementarea normală poate duce la o stare de așteptare ocupată, care irosește timp CPU.
Diferență între Semaphore și Mutex
Pe baza a ceea ce am învățat lucrând cu ei, iată cum Mutex și Semaphores diferă:
parametrii | Semaphore | mutex |
---|---|---|
Mecanism | Este un tip de mecanism de semnalizare. | Este un mecanism de blocare. |
Tipul de date | Semaphore este o variabilă întreagă. | Mutex este doar un obiect. |
Modificare | Operațiile de așteptare și semnal pot modifica un semafor. | Este modificat doar de procesul care poate solicita sau elibera o resursă. |
Managementul resurselor | Dacă nicio resursă nu este liberă, atunci procesul necesită o resursă care ar trebui să execute operația de așteptare. Ar trebui să aștepte până când numărul semaforului este mai mare decât 0. | Dacă este blocat, procesul trebuie să aștepte. Procesul trebuie ținut la coadă. Acesta trebuie accesat numai când mutex-ul este deblocat. |
Fir | Puteți avea mai multe fire de execuție de program. | Puteți avea mai multe fire de execuție în mutex, dar nu simultan. |
Proprietate | Valoarea poate fi schimbată prin orice proces care eliberează sau obține resursa. | Blocarea obiectului este eliberată numai de procesul, care a obținut blocarea asupra acestuia. |
Tipuri de | Tipuri de Semaphore se numără semaforul și semaforul binar. | Mutex nu are subtipuri. |
Ziua Operației | Semaphore valoarea este modificată utilizând operația de așteptare () și semnal (). | Obiectul Mutex este blocat sau deblocat. |
Ocuparea resurselor | Este ocupat dacă toate resursele sunt utilizate și procesul care solicită resurse efectuează operația de așteptare () și se blochează până când numărul de semafor devine >1. | În cazul în care obiectul este deja blocat, procesul care solicită resurse așteaptă și este pus în coadă de sistem înainte ca blocarea să fie eliberată. |
Concluzie
Din experiența mea, cheia pentru a alege între mutexuri și semafoare este recunoașterea nuanțelor lor operaționale. SemaphoreE-urile sunt ideale pentru sincronizări complexe, în timp ce mutexurile sunt potrivite pentru excluderi reciproce simple, asigurând siguranța resurselor în contexte mai simple.