Comparare între semafor și mutex.
Mutex
Conceptele despre mutex sunt foarte asemănătoare cu cele de blocare. Când doriți să intrați într-o cameră , trebuie să dobândiți lacătul apoi să aveți permisiunea de a intra. În informatică , mutexul este folosit pentru a proteja secțiunea critică împiedicând alte fire de execuție să acceseze reciproc același cod pentru a evita condițiile de rasă.
Thread A Thread Bacquire mutex acquire mutex ... it will block
do something critical do something critical
release mutex release lock
Este o cheie de la o toaletă. O singură persoană poate avea cheia – să ocupe toaleta – la un moment dat. Când termină, persoana respectivă dă (eliberează) cheia următoarei persoane din coadă.
Oficial: „Mutexurile sunt utilizate de obicei pentru a serializa accesul la o secțiune de cod reentrant care nu poate fi executată concomitent de mai mult de un fir de execuție. Un obiect mutex permite doar unui singur fir de execuție să intre într-o secțiune controlată, forțând alte fire de execuție care încearcă să obțină acces la acea secțiune să aștepte până când primul fir de execuție a ieșit din acea secțiune.”
Ref: Symbian Developer Library
Semaphore
Nu ca mutexurile fie sunt achiziționate, fie așteaptă să fie achiziționate. Semaforul poate seta valoarea inițială la N>1. Putem folosi această valoare pentru a restricționa numărul de utilizatori din acest proces cărora li se va permite să acceseze secțiunea critică.
Diferența principală dintre semafor și mutex este că mutexul poate fi eliberat doar de către utilizatorul care îl deține. Dar în mecanismul de semaforizare orice utilizator poate semnaliza către orice semafor specific din kernel. Acest lucru poate asigura concurența firelor.
Mai jos este conceptul de semafor , Când firul A este OK, atunci semnalizează firul B și apoi firul B începe să facă ceva.
Acest mecanism asigură concurența în proces.
Task A Task B
... Take BinSemaphore <== wait for something
Do Something Noteworthy
Give BinSemaphore do something <== unblocks
Este numărul de chei de toaletă identice libere. Exemplu, să spunem că avem patru toalete cu încuietori și chei identice. Numărul de semafoare – numărul de chei – este setat la 4 la început (toate cele patru toalete sunt libere), apoi valoarea numărului este decrementată pe măsură ce intră oameni. Dacă toate toaletele sunt pline, adică nu mai sunt chei libere, numărul de semafoare este 0. Acum, când eq. o persoană părăsește toaleta, semaforul este mărit la 1 (o cheie liberă), și se dă următoarei persoane din coadă.
Oficial: „Un semafor restricționează numărul de utilizatori simultani ai unei resurse partajate până la un număr maxim. Firele de execuție pot solicita accesul la resursă (descreșterea semaforului) și pot semnala că au terminat de utilizat resursa (incrementând semaforul).”
Ref: Symbian Developer Library
Riscuri
Utilizarea mutexului poate întâmpina Inversiunea priorității. Va trebui să proiectați cu atenție scenariul bazat pe mutex.
.