Mutex vs Semaphore
Un mutex è analogo a una singola chiave di una stanza. Una persona che detiene la chiave, che è analoga a un thread, è l'unica che può avere accesso alla stanza. La persona con l'accesso dovrà quindi rinunciare alla chiave per la prossima persona in fila. Pertanto, un mutex può essere rilasciato solo dal thread che lo acquisisce.
Un mutex viene normalmente utilizzato per serializzare l'accesso a una sezione di un codice rientrante "" una specie di codice che non può essere eseguito da più thread contemporaneamente. Solo una singola discussione è consentita in una sezione. Ciò impone agli altri thread in coda di attendere. Prima che un thread abbia accesso, dovrà attendere il thread prima di abbandonare la sezione.
Usando la stessa analogia in mutex, i semafori sono il numero di chiavi simili che possono accedere allo stesso numero di stanze con serrature simili. Un semaforo o il valore di un conteggio del semaforo dipenderà dal numero di persone (discussioni) che entrano o escono dalla stanza. Se ci sono 5 stanze e sono tutte occupate, il conteggio del semaforo è zero. Se due lasciano la stanza, il conteggio è due e le due chiavi vengono assegnate ai due successivi nella coda.
Detto questo, i semafori possono essere segnalati simultaneamente da qualsiasi thread o processo e sono ideali per le applicazioni che richiedono la sincronizzazione. Tuttavia, i semafori vengono utilizzati per limitare in modo efficace il numero di utenti simultanei di una risorsa comune in base al conteggio massimo del semaforo.
Quindi, in sostanza, un mutex può essere considerato come un semaforo che ha un valore di uno.
Il decremento e l'incremento del semaforo dipendono dal fatto che i thread stiano richiedendo l'accesso alla risorsa comune o lasciando la sezione.
In teoria, i semifori mutex e (binari) sono semanticamente simili. L'implementazione del mutex può essere fatta usando i semafori e così avviene il contrario. Tuttavia, nel senso pratico, possono essere un po 'diversi.
I mutex sono destinati ad essere applicati esclusivamente per l'esclusione reciproca e i semafori binari sono destinati ad essere utilizzati per l'esclusione reciproca e la notifica degli eventi. Sebbene siano molto simili in termini di implementazione e semantica generale, vengono utilizzati in modo diverso.
Sommario:
1. Mutex viene in genere utilizzato per serializzare l'accesso a una risorsa comune mentre un semaforo è un numero di accessi simultanei.
2. Mutex è come un semaforo con un conto di uno.
3. Mutex consente solo a un singolo thread di accedere mentre i semafori possono essere segnalati simultaneamente da qualsiasi thread o processo.
4. I semafori sono ideali per la sincronizzazione e spesso usati per la notifica di eventi e l'esclusione reciproca mentre il mutex è applicato solo per l'esclusione reciproca.