Mutex vs Semaphore - Differenza tra loro
Differenza chiave tra Mutex e Semaphore
- Mutex รจ un meccanismo di blocco, mentre Semaphore รจ un meccanismo di segnalazione
- Mutex รจ solo un oggetto, mentre Semaphore รจ un intero
- Mutex non ha sottotipo, mentre il semaforo ha due tipi: semaforo di conteggio e semaforo binario.
- Semaphore supporta la modifica delle operazioni di attesa e di segnalazione, mentre Mutex viene modificato solo dal processo che puรฒ richiedere o rilasciare una risorsa.
- Semaphore il valore viene modificato utilizzando le operazioni wait() e signal(), d'altro canto, le operazioni Mutex vengono bloccate o sbloccate.
Qui, ho analizzato la differenza tra Mutex e Semaphore e ne valuterร in modo esaustivo i pro e i contro.
Fatti comuni su Mutex e Semaphore
Traendo spunto dalla mia pratica, ecco alcuni fatti comuni su Mutex vs Semaphore:
- Solo un'attivitร puรฒ acquisire il mutex. Pertanto, un mutex ha la proprietร e solo il proprietario puรฒ rilasciarlo.
- Le ragioni per utilizzare mutex e semaforo sono diverse forse a causa della somiglianza nella loro implementazione, un mutex verrebbe definito semaforo binario.
- Un malinteso molto noto รจ che Mutexes e Semaphoresono quasi uguali, con l'unica differenza che un Mutex รจ in grado di contare fino a 1, mentre SemaphoreSa contare da 0 a N.
- C'รจ sempre incertezza tra semaforo binario e mutex. Potresti sentire che un mutex รจ un semaforo binario, il che non รจ corretto.
Che cos'รจ un Semaphore?
Un semaforo รจ semplicemente una variabile non negativa e condivisa tra thread. Un semaforo รจ un meccanismo di segnalazione e un thread che รจ in attesa su un semaforo puรฒ essere segnalato da un altro thread. Utilizza due operazioni atomiche, 1) wait e 2) signal per il sincronizzazione dei processi.
A semaforo consente o impedisce l'accesso alla risorsa, a seconda di come รจ impostata.
L'uso di Semaphore
Nel caso di un singolo buffer, possiamo separare il buffer da 4 KB in quattro buffer da 1 KB. Semaphore puรฒ essere associato a questi quattro buffer. Ciรฒ consente agli utenti e ai produttori di lavorare su buffer diversi contemporaneamente.
Vantaggi di Semaphore
Nella mia pratica, ecco i principali aspetti positivi dell'utilizzo del semaforo:
- Consente a piรน di un thread di accedere alla sezione critica
- Semaphoresono indipendenti dalla macchina.
- Semaphores sono implementati nel codice indipendente dalla macchina del microkernel.
- Non consentono a piรน processi di entrare nella sezione critica.
- Poichรฉ al semaforo c'รจ un programma di attesa intenso, non c'รจ mai uno spreco di tempo e risorse di processo.
- Sono indipendenti dalla macchina, che dovrebbero essere eseguiti nel codice indipendente dalla macchina del microkernel.
- Consentono una gestione flessibile delle risorse.
Svantaggi di Semaphores
Ecco gli svantaggi del semaforo che ho riscontrato.
- Uno dei maggiori limiti di un semaforo รจ l'inversione della prioritร .
- Il sistema operativo deve mantenere track di tutte le chiamate per attendere e segnalare il semaforo.
- Il loro utilizzo non รจ mai imposto, ma รจ solo per convenzione.
- Per evitare situazioni di stallo nel semaforo, Wait e Signal le operazioni devono essere eseguite nell'ordine corretto.
- Semaphore la programmazione รจ un metodo complesso, quindi รจ probabile che non si riesca a raggiungere l'esclusione reciproca.
- Inoltre, non รจ un metodo pratico per un utilizzo su larga scala poichรฉ il loro utilizzo porta alla perdita di modularitร .
- Semaphore รจ piรน soggetto a errori del programmatore.
- Puรฒ causare punto morto o violazione della mutua esclusione dovuta ad errore del programmatore.
Cos'รจ Mutex?
La forma completa di Mutex รจ Oggetto di esclusione reciproca. ร un tipo speciale di semaforo binario utilizzato per controllare l'accesso alla risorsa condivisa. Include un meccanismo di ereditarietร delle prioritร per evitare problemi estesi di inversione delle prioritร . Consente di mantenere le attivitร attuali con prioritร piรน elevata nello stato bloccato per il minor tempo possibile. Tuttavia, l'ereditarietร della prioritร non corregge l'inversione della prioritร ma ne minimizza solo l'effetto.
Uso del mutex
Un mutex fornisce mutua esclusione, che puรฒ essere sia produttore che consumatore, che puรฒ avere la chiave (mutex) e procedere con il proprio lavoro. Finchรฉ il produttore riempie il buffer, l'utente deve attendere, e viceversa. Nel blocco Mutex, sempre, solo un singolo thread puรฒ lavorare con l'intero buffer.
Vantaggi del Mutex
Da quello che ho osservato, ecco i principali vantaggi di Mutex:
- I mutex sono semplicemente dei semplici lock ottenuti prima di entrare nella sua sezione critica e poi rilasciarla.
- Poichรฉ in un dato momento solo un thread si trova nella sezione critica, non esistono condizioni di competizione e i dati rimangono sempre coerenti.
Svantaggi del Mutex
Nella mia pratica, ho identificato diversi svantaggi di Mutex.
- Se un thread ottiene un blocco e va in modalitร di sospensione o viene interrotto, l'altro thread potrebbe non essere in grado di andare avanti. Ciรฒ puรฒ portare alla fame.
- Non puรฒ essere bloccato o sbloccato da un contesto diverso da quello che lo ha acquisito.
- Nella sezione critica dovrebbe essere consentito un solo thread alla volta.
- La normale implementazione puรฒ portare ad uno stato di attesa occupato, che fa sprecare tempo alla CPU.
Differenza fra Semaphore e Mutex
Sulla base di ciรฒ che ho imparato lavorando con loro, ecco come funzionano i Mutex e Semaphoredifferiscono:
| Scheda Sintetica | Semaphore | mutex |
|---|---|---|
| Meccanismo | ร un tipo di meccanismo di segnalazione. | ร un meccanismo di bloccaggio. |
| Tipo di dati | Semaphore รจ una variabile intera. | Mutex รจ solo un oggetto. |
| Modifica | Le operazioni di attesa e segnalazione possono modificare un semaforo. | Viene modificato solo dal processo che puรฒ richiedere o rilasciare una risorsa. |
| Gestione delle Risorse | Se nessuna risorsa รจ libera, il processo richiede una risorsa che esegua l'operazione di attesa. Dovrebbe attendere fino a quando il conteggio del semaforo รจ maggiore di 0. | Se รจ bloccato, il processo deve attendere. Il processo dovrebbe essere mantenuto in coda. ร necessario accedervi solo quando il mutex รจ sbloccato. |
| Filo | Puoi avere piรน thread di programma. | ร possibile avere piรน thread di programma in mutex, ma non contemporaneamente. |
| Proprietร | Il valore puรฒ essere modificato da qualsiasi processo che rilascia o ottiene la risorsa. | Il blocco dell'oggetto viene rilasciato solo dal processo che ha ottenuto il blocco su di esso. |
| Tipi | Tipi di Semaphore stanno contando semafori e semafori binari. | Mutex non ha sottotipi. |
| Funzionamento | Semaphore il valore viene modificato utilizzando le operazioni wait() e signal(). | L'oggetto Mutex รจ bloccato o sbloccato. |
| Occupazione delle risorse | ร occupato se tutte le risorse vengono utilizzate e il processo che richiede la risorsa esegue l'operazione wait() e si blocca finchรฉ il conteggio del semaforo non diventa >1. | Nel caso in cui l'oggetto sia giร bloccato, il processo che richiede risorse attende e viene messo in coda dal sistema prima che il blocco venga rilasciato. |
Conclusione
Secondo la mia esperienza, la chiave per scegliere tra mutex e semafori รจ riconoscerne le sfumature operative. Semaphoresono ideali per sincronizzazioni complesse, mentre i mutex sono adatti per esclusioni mutue semplici, garantendo la sicurezza delle risorse in contesti piรน semplici.
