Semaforo v.s. Mutex

Confronto tra semaforo e mutex.

Mutex

I concetti sul mutex sono molto simili al lock. Quando vuoi entrare in una stanza, devi acquisire la serratura e poi avere il permesso di entrare. In informatica, il mutex è usato per proteggere la sezione critica impedendo ad altri thread di accedere reciprocamente allo stesso codice per evitare condizioni di gara.

Thread A Thread Bacquire mutex acquire mutex ... it will block 
do something critical do something critical
release mutex release lock

È la chiave di un bagno. Una persona può avere la chiave – occupare la toilette – al momento. Quando ha finito, la persona dà (libera) la chiave alla prossima persona in coda.

Officialmente: “I mutex sono tipicamente usati per serializzare l’accesso ad una sezione di codice rientrante che non può essere eseguita contemporaneamente da più di un thread. Un oggetto mutex permette ad un solo thread di entrare in una sezione controllata, costringendo gli altri thread che tentano di accedere a quella sezione ad aspettare che il primo thread sia uscito da quella sezione.”
Rif: Symbian Developer Library

Semaphore

Non come i mutex o vengono acquisiti o aspettano di essere acquisiti. Semaphore può impostare il valore iniziale a N>1. Possiamo usare il valore per limitare quanti utenti in questo processo saranno autorizzati ad accedere alla sezione critica.

La differenza principale tra semaforo e mutex è che il mutex può essere rilasciato solo dall’utente che lo possiede. Ma nel meccanismo del semaforo qualsiasi utente può segnalare a qualsiasi semaforo specifico nel kernel. Questo può assicurare la concorrenzialità del thread.

Di seguito è riportato il concetto di semaforo, quando il thread A è OK allora segnala il thread B allora il thread B inizia a fare qualcosa.

Questo meccanismo assicura la concorrenzialità nel processo.

Task A Task B
... Take BinSemaphore <== wait for something
Do Something Noteworthy
Give BinSemaphore do something <== unblocks

È il numero di chiavi identiche libere del bagno. Esempio: diciamo che abbiamo quattro gabinetti con serrature e chiavi identiche. Il semaforo count – il numero di chiavi – è impostato su 4 all’inizio (tutti e quattro i gabinetti sono liberi), poi il valore del count viene decrementato man mano che la gente entra. Se tutti i bagni sono pieni, cioè non ci sono più chiavi libere, il conteggio del semaforo è 0. Ora, quando eq. una persona lascia il bagno, il semaforo viene aumentato a 1 (una chiave libera), e dato alla prossima persona in coda.

Officialmente: “Un semaforo limita il numero di utenti simultanei di una risorsa condivisa fino ad un numero massimo. I thread possono richiedere l’accesso alla risorsa (decrementando il semaforo), e possono segnalare che hanno finito di usare la risorsa (incrementando il semaforo).”
Rif: Symbian Developer Library

Rischi

L’uso del mutex può incontrare la Priority Inversion. Dovrete progettare attentamente lo scenario basato sul mutex.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.