Diferența dintre Mutex și Semaphore Diferența dintre

Anonim

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 folosit în mod normal pentru a serializa accesul la o secțiune a unui cod reintrant "" 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, semaphorele sunt 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 acest lucru 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, semafoarele sunt utilizate pentru a restricționa în mod eficient numărul de utilizatori concurenți ai unei resurse comune bazate pe numărul maxim de semaforuri.

Deci, 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ăsirea secțiunii.

În teorie, semnalele mutex și (binare) sunt semantic similare. Implementarea mutexului se poate face folosind semafoare și este invers. Cu toate acestea, în sensul practic, ele pot fi puțin diferite.

Mutexurile se intenționează a fi aplicate doar pentru excluderea reciprocă, 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 folosit î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 unul.

3. Mutex permite doar accesul unui singur fir, în timp ce semafoarele pot fi semnalizate 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ă.