La differenza fondamentale tra semaforo e mutex è che il semaforo è un meccanismo di segnalazione, cioè i processi eseguono l'operazione wait () e signal () per indicare se stanno acquisendo o rilasciando la risorsa, mentre Mutex è il meccanismo di blocco, il processo deve acquisire il blocco oggetto mutex se vuole acquisire la risorsa. Ci sono alcune più differenze tra semaforo e mutex, discutiamoli con l'aiuto del grafico di confronto mostrato di seguito.
Grafico comparativo
Base per il confronto | Semaforo | mutex |
---|---|---|
Di base | Il semaforo è un meccanismo di segnalazione. | Mutex è un meccanismo di blocco. |
Esistenza | Il semaforo è una variabile intera. | Mutex è un oggetto. |
Funzione | Il semaforo consente a più thread del programma di accedere a un'istanza di risorse finite. | Mutex consente a più thread del programma di accedere a una singola risorsa ma non simultaneamente. |
Proprietà | Il valore del semaforo può essere modificato da qualsiasi processo che acquisisce o rilascia la risorsa. | Il blocco degli oggetti Mutex viene rilasciato solo dal processo che ha acquisito il blocco su di esso. |
Classificare | Il semaforo può essere categorizzato nel conteggio del semaforo e del semaforo binario. | Mutex non è ulteriormente categorizzato. |
operazione | Il valore del semaforo viene modificato utilizzando l'operazione wait () e signal (). | L'oggetto Mutex è bloccato o sbloccato dal processo che richiede o rilascia la risorsa. |
Risorse occupate | Se tutte le risorse vengono utilizzate, il processo che richiede la risorsa esegue l'operazione wait () e si blocca fino a quando il conteggio dei semafori diventa maggiore di uno. | Se un oggetto mutex è già bloccato, il processo di richiesta di risorse attende e viene accodato dal sistema fino al rilascio del blocco. |
Definizione di Semaforo
Il semaforo è uno strumento di sincronizzazione del processo. Il semaforo è in genere una variabile intera S che viene inizializzata sul numero di risorse presenti nel sistema e il valore del semaforo può essere modificato solo da due funzioni wait () e signal () a prescindere dall'inizializzazione.
L'operazione wait () e signal () modifica il valore del semaforo indivisibilmente . Significa che quando un processo modifica il valore del semaforo, nessun altro processo può modificare simultaneamente il valore del semaforo. Il semaforo si distingue per il sistema operativo in due categorie: semafori di conteggio e semaforo binario .
In Counting Semaphore, il valore S del semaforo viene inizializzato sul numero di risorse presenti nel sistema. Ogni volta che un processo vuole accedere alla risorsa esegue un'operazione wait () sul semaforo e decrementa il valore del semaforo di uno. Quando rilascia la risorsa, esegue l' operazione signal () sul semaforo e incrementa di un'unità il valore del semaforo. Quando il conteggio del semaforo diventa 0, significa che tutte le risorse sono occupate dai processi. Se un processo deve utilizzare una risorsa quando il conteggio dei semafori è 0, esegue wait () e viene bloccato fino a quando il valore del semaforo diventa maggiore di 0.
Nel semaforo binario, il valore del semaforo varia tra 0 e 1 . È simile al blocco mutex, ma il mutex è un meccanismo di blocco mentre il semaforo è un meccanismo di segnalazione. Nel semaforo binario, se un processo vuole accedere alla risorsa esegue l'operazione wait () sul semaforo e decrementa il valore del semaforo da 1 a 0. Quando rilascia la risorsa, esegue un'operazione signal () sul semaforo e gli incrementi il suo valore a 1. Se il valore del semaforo è 0 e un processo desidera accedere alla risorsa esegue l'operazione wait () e si blocca fino a quando il processo corrente che utilizza le risorse rilascia la risorsa.
Definizione di Mutex
L'oggetto di esclusione reciproca è brevemente definito mutex. Dal termine dell'esclusione reciproca, possiamo capire che solo un processo alla volta può accedere alla risorsa data. L'oggetto mutex consente ai thread multipli del programma di utilizzare la stessa risorsa ma una alla volta non contemporaneamente.
All'avvio di un programma, richiede al sistema di creare un oggetto mutex per una determinata risorsa. Il sistema crea l'oggetto mutex con un nome o ID univoco. Ogni volta che il thread del programma vuole usare la risorsa che occupa lock su oggetto mutex, utilizza la risorsa e dopo l'uso rilascia il lock su oggetto mutex. Quindi il processo successivo è autorizzato ad acquisire il blocco su oggetto mutex.
Nel frattempo, un processo ha acquisito il blocco su oggetto mutex nessun altro thread / processo può accedere a tale risorsa. Se l'oggetto mutex è già bloccato, il processo che desidera acquisire il blocco su oggetto mutex deve attendere e viene accodato dal sistema finché l'oggetto mutex non viene sbloccato.
Differenze chiave tra semaforo e mutex
- Il semaforo è un meccanismo di segnalazione quando l'operazione wait () e signal () eseguita sulla variabile semaforo indica se un processo sta acquisendo la risorsa o rilasciando la risorsa. D'altra parte, il mutex è un meccanismo di blocco, in quanto per acquisire una risorsa, un processo deve bloccare l'oggetto mutex e mentre rilasciando un processo di risorsa deve sbloccare l'oggetto mutex.
- Il semaforo è in genere una variabile intera mentre, mutex è un oggetto .
- Il semaforo consente a più thread del programma di accedere all'istanza delle risorse finite . D'altra parte, Mutex consente a più thread del programma di accedere a una singola risorsa condivisa, ma una alla volta.
- Il valore variabile del semaforo può essere modificato da qualsiasi processo che acquisisce o rilascia risorse eseguendo l'operazione wait () e signal (). D'altra parte, il blocco acquisito sull'oggetto mutex può essere rilasciato solo dal processo che ha acquisito il blocco su oggetto mutex.
- I semafori sono di due tipi che contano semaforo e semaforo binario che è abbastanza simile al mutex.
- Il valore della variabile del semaforo viene modificato dall'operazione wait () e signal () a prescindere dall'inizializzazione. Tuttavia, l'oggetto muto è bloccato o sbloccato dal processo che acquisisce o rilascia la risorsa.
- Se tutte le risorse sono acquisite dal processo e nessuna risorsa è libera, il processo che desidera acquisire la risorsa esegue l'operazione wait () sulla variabile semaforo e si blocca fino a che il conteggio del semaforo diventa maggiore di 0. Ma se un oggetto mutex è già bloccato quindi il processo che desidera acquisire le risorse attende e viene accodato dal sistema fino a quando la risorsa non viene rilasciata e l'oggetto mutex viene sbloccato.
Conclusione:
Il semaforo è un'opzione migliore nel caso in cui siano disponibili più istanze di risorse. Nel caso di una risorsa condivisa singola, il mutex è una scelta migliore.