Mutex vs semaforo: qual è la differenza?

Sommario:

Anonim

Cos'è il semaforo?

Il semaforo è semplicemente una variabile non negativa e condivisa tra i thread. Un semaforo è un meccanismo di segnalazione e un thread in attesa di un semaforo può essere segnalato da un altro thread. Utilizza due operazioni atomiche, 1) wait e 2) segnale per la sincronizzazione del processo.

Un semaforo consente o non consente l'accesso alla risorsa, che dipende da come è impostato.

In questo tutorial imparerai:

  • Cos'è Mutex?
  • Uso del semaforo
  • Uso di Mutex
  • Differenza tra semaforo e mutex
  • Idee sbagliate comuni su Mutex e Semaphore
  • Vantaggi di Semaphore
  • Vantaggi di Mutex
  • Svantaggio dei semafori
  • Svantaggi di Mutex

Cos'è Mutex?

La forma completa di Mutex è Mutual Exclusion Object. È un tipo speciale di semaforo binario utilizzato per controllare l'accesso alla risorsa condivisa. Include un meccanismo di ereditarietà delle priorità per evitare problemi di inversione di priorità estesa. Consente di mantenere le attività correnti con priorità più alta nello stato bloccato per il minor tempo possibile. Tuttavia, l'ereditarietà delle priorità non corregge l'inversione di priorità ma ne riduce al minimo l'effetto.

DIFFERENZA CHIAVE

  • Mutex è un meccanismo di blocco mentre Semaphore è un meccanismo di segnalazione
  • Mutex è solo un oggetto mentre Semaphore è un numero intero
  • Mutex non ha sottotipi mentre Semaphore ha due tipi, che contano il semaforo e il semaforo binario.
  • Il semaforo supporta la modifica delle operazioni di attesa e di segnalazione, mentre Mutex viene modificato solo dal processo che può richiedere o rilasciare una risorsa.
  • Il valore del semaforo viene modificato utilizzando le operazioni wait () e signal (), d'altra parte, le operazioni Mutex vengono bloccate o sbloccate.

Uso del semaforo

Nel caso di un singolo buffer, possiamo separare il buffer da 4 KB in quattro buffer da 1 KB. Il semaforo può essere associato a questi quattro buffer. Ciò consente a utenti e produttori di lavorare su diversi buffer contemporaneamente.

Uso di Mutex

Un mutex prevede l'esclusione reciproca, che può essere produttore o 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ò funzionare con l'intero buffer.

Differenza tra semaforo e mutex

Parametri Semaforo Mutex
Meccanismo È un tipo di meccanismo di segnalazione. È un meccanismo di bloccaggio.
Tipo di dati Il semaforo è una variabile intera. Mutex è solo un oggetto.
Modifica Le operazioni wait e signal 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 dovrebbe eseguire 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 tenuto 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 rilasci o ottenga la risorsa. Il blocco dell'oggetto viene rilasciato solo dal processo che ha ottenuto il blocco su di esso.
Tipi I tipi di semaforo contano il semaforo e il semaforo binario. Mutex non ha sottotipi.
Operazione Il valore del semaforo 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 fino a quando il conteggio dei semafori 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.

Fatti comuni su Mutex e Semaphore

Ecco alcuni fatti comuni su Mutex e Semaphore:

  • Solo un'attività può acquisire il mutex. Quindi, la proprietà è associata a un mutex e solo il proprietario può rilasciare il mutex.
  • Le ragioni per utilizzare mutex e semaforo sono diverse, forse a causa della somiglianza nella loro implementazione, un mutex verrebbe indicato come semaforo binario.
  • Un malinteso molto noto è che Mutex e Semafori siano quasi gli stessi, con l'unica differenza che un Mutex è in grado di contare fino a 1, mentre i Semafori in grado di 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.

Vantaggi di Semaphore

Ecco i vantaggi / vantaggi dell'utilizzo di Semaphore:

  • Consente a più thread di accedere alla sezione critica
  • I semafori sono indipendenti dalla macchina.
  • I semafori sono implementati nel codice indipendente dalla macchina del microkernel.
  • Non consentono a più processi di entrare nella sezione critica.
  • Poiché l'attesa è impegnata nel semaforo, 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.

Vantaggi di Mutex

Qui ci sono importanti vantaggi / vantaggi di Mutex

  • I mutex sono solo semplici blocchi ottenuti prima di entrare nella sua sezione critica e quindi rilasciarla.
  • Poiché solo un thread si trova nella sua sezione critica in un dato momento, non ci sono condizioni di competizione e i dati rimangono sempre coerenti.

Svantaggio dei semafori

Qui ci sono i contro / svantaggi del semaforo

  • Uno dei maggiori limiti di un semaforo è l'inversione di priorità.
  • Il sistema operativo deve tenere traccia di tutte le chiamate per attendere e segnalare il semaforo.
  • Il loro uso non è mai imposto, ma è solo per convenzione.
  • Per evitare deadlock nel semaforo, le operazioni Wait e Signal devono essere eseguite nell'ordine corretto.
  • La programmazione del semaforo è un metodo complesso, quindi ci sono possibilità di non ottenere l'esclusione reciproca.
  • Inoltre, non è un metodo pratico per un utilizzo su larga scala poiché il loro utilizzo porta alla perdita di modularità.
  • Il semaforo è più soggetto a errori del programmatore.
  • Può causare deadlock o violazione dell'esclusione reciproca a causa di un errore del programmatore.

Svantaggi di Mutex

Ecco i contro / svantaggi di Mutex

  • Se un thread ottiene un blocco e va in sospensione o viene interrotto, l'altro thread potrebbe non essere in grado di andare avanti. Questo 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 a uno stato di attesa occupato, che fa perdere tempo alla CPU.