Differenza tra semaforico e mutex
Semaphore vs Mutex
Semaphore è una struttura dei dati utilizzata per assicurarsi che i processi multipli non accedano a un comune risorse o una sezione critica allo stesso tempo, in ambienti di programmazione parallela. I semafori vengono utilizzati per evitare blocchi morti e condizioni di razza. Inoltre, Mutex (Object of Exclusion Mutual) viene utilizzato per evitare l'accesso a una risorsa comune contemporaneamente da diversi processi concorrenti.
Che cosa è un semaforo ?
Semaphore è una struttura di dati utilizzata per fornire l'esclusione reciproca a sezioni critiche. I semafori supportano principalmente due operazioni chiamate attesa (storicamente nota come P) e segnale (storicamente noto come V). L'operazione di attesa blocca un processo fino a quando il semaforo è aperto e l'operazione di segnale consente un altro processo (thread) da immettere. Ogni semaforo è associato a una coda di processi di attesa. Quando l'operazione di attesa viene chiamata da un thread, se il semaforo è aperto, il thread può continuare. Se il semaforo viene chiuso quando l'operazione di attesa viene chiamata da un thread, il thread è bloccato e deve attendere nella coda. L'operazione del segnale apre un semaforo e se c'è un thread già in attesa nella coda, questo processo è consentito di procedere e se non ci sono thread in attesa nella coda, il segnale viene memorizzato per i thread successivi. Ci sono due tipi di semafori chiamati semafori di mutex e conteggio di semafori. I semafori di Mutex consentono un accesso singolo a una risorsa e semafori di conteggio permettono a più thread di accedere a una risorsa (che dispone di più unità).
Che cos'è un Mutex?
Quando viene avviata un'applicazione di computer, creerà un mutex e la si collega a una risorsa. Quando la risorsa viene utilizzata da un thread, è bloccata e altri thread non possono utilizzarlo. Se un altro thread desidera utilizzare la stessa risorsa, dovrà fare una richiesta. Quindi il thread verrà inserito in una coda finché il primo thread non è terminato con la risorsa. Quando il primo thread è terminato con la risorsa, il blocco verrà rimosso e il thread in attesa nella coda può accedere alla risorsa. Se ci sono più thread in attesa nella coda, gli viene concesso l'accesso in base alla rotazione. Praticamente, quando il mutex alternerà l'accesso a una risorsa tra più thread, sarà visibile quando più thread stanno consumando una risorsa allo stesso tempo. Ma internamente un solo thread sta accedendo alla risorsa in un dato momento.
Qual è la differenza tra Semaphore e Mutex?
Anche se entrambi i semafori e gli oggetti mutex vengono utilizzati per ottenere l'esclusione reciproca in ambienti di programmazione parallela, essi presentano alcune differenze. Un oggetto mutex consente solo un singolo thread di consumare una risorsa o una sezione critica, mentre i semafori consentono un numero limitato di accessi simultanei a una risorsa (sotto un numero massimo consentito).Con gli oggetti mutex, altri thread che desiderano accedere alla risorsa devono aspettare in una coda, finché il thread corrente non è terminato utilizzando la risorsa.