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.

Differenza tra Mutex e Semaphore
Differenza tra Mutex e Semaphore

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 tenere traccia di tutte le chiamate in attesa e segnalare al 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:

Semaphore contro Mutex
Semaphore contro Mutex
parametri 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.