Mutex vs Semaphore
Un mutex este analog unei singure taste unei camere. O persoană care ține cheia, care este analogă unui fir, este singura care poate avea acces la cameră. Persoana cu acces va trebui apoi să renunțe la cheia următoarei persoane în linie. Prin urmare, un mutex poate fi eliberat numai de firul care îl achiziționează.
Un mutex este utilizat în mod normal pentru a serializa accesul la o secțiune a unui cod reentrant "" un fel de cod care nu poate fi executat de mai multe fire simultan. Numai un singur fir este permis într-o secțiune. Acest lucru obligă celelalte fire în coadă să aștepte. Înainte ca un fir să aibă acces, va trebui să așteptați până când firul va renunța la secțiune.
Folosind aceeași analogie în mutex, semafoarele reprezintă numărul de chei similare care pot accesa același număr de camere cu încuietori similare. Un semafor sau valoarea unui număr de semaphore va depinde de numărul de persoane (firele) care intră sau ies din cameră. Dacă există 5 camere și toate sunt ocupate, atunci numărul semaforului este zero. Dacă doi părăsesc camera, atunci numărătoarea este de două și cele două chei sunt date la următoarele două în coadă.
Cu aceasta se spune că semafoarele pot fi semnalizate concomitent de orice fir sau proces și sunt ideale pentru aplicațiile care necesită sincronizare. Cu toate acestea, semaphorele sunt folosite pentru a restricționa în mod eficient numărul de utilizatori concurenți ai unei resurse comune bazate pe numărul maxim de semnale.
Deci, practic, un mutex poate fi considerat ca un semafor având valoarea de unu.
Decrementul și incrementarea semaphorelor depind de faptul dacă firele solicită accesul la resursele comune sau părăsesc secțiunea.
În teorie, semaphorele mutex și (binare) sunt semantic similare. Implementarea mutexului se poate face folosind semafoare și așa este invers. Cu toate acestea, în sensul practic, ele pot fi puțin diferite.
Mutexurile sunt destinate să fie aplicate doar pentru excluderea mutuală, iar semaforurile binare sunt destinate a fi utilizate pentru excluderea reciprocă și notificarea evenimentelor. Deși sunt foarte asemănătoare în ceea ce privește implementarea și semantica generală, ele sunt folosite în mod diferit.
Rezumat:
1. Mutexul este utilizat în mod obișnuit pentru a serializa accesul la o resursă comună în timp ce un semafor este un număr de accesuri concurente.
2. Mutexul este ca un semafor cu un număr de unu.
3. Mutex permite doar unui fir unic să aibă acces în timp ce semafoarele pot fi semnalate simultan de orice fir sau proces.
4. Semaphorele sunt ideale pentru sincronizare și sunt adesea folosite pentru notificarea evenimentelor și excluderea reciprocă, în timp ce mutexul este aplicat exclusiv pentru excluderea reciprocă.