Differenza tra semaforo e mutex

Differenza tra semaforo e mutex
Differenza tra semaforo e mutex

Video: Differenza tra semaforo e mutex

Video: Differenza tra semaforo e mutex
Video: TELESCOPIO RIFLETTORE O RIFRATTORE? (il migliore per i principianti) 2024, Luglio
Anonim

Semaphore vs Mutex

Semaphore è una struttura di dati utilizzata per assicurarsi che più processi non accedano a una risorsa comune oa una sezione critica contemporaneamente, in ambienti di programmazione paralleli. I semafori vengono utilizzati per evitare dead lock e condizioni di gara. Mutex (oggetto di esclusione reciproca) viene utilizzato anche per evitare l'accesso a una risorsa comune contemporaneamente da più processi simultanei.

Cos'è un semaforo?

Semaphore è una struttura di dati utilizzata per fornire l'esclusione reciproca alle sezioni critiche. I semafori supportano principalmente due operazioni chiamate wait (storicamente noto come P) e signal (storicamente noto come V). L'operazione di attesa blocca un processo fino a quando il semaforo non è aperto e l'operazione di segnale consente a un altro processo (thread) di entrare. Ogni semaforo è associato a una coda di processi in 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 viene bloccato e deve attendere in coda. L'operazione del segnale apre un semaforo e se c'è già un thread in attesa nella coda, quel processo può procedere e se non ci sono thread in attesa nella coda il segnale viene ricordato per i thread successivi. Esistono due tipi di semafori chiamati semafori mutex e semafori di conteggio. I semafori Mutex consentono un singolo accesso a una risorsa e il conteggio dei semafori consente a più thread di accedere a una risorsa (che ha diverse unità disponibili).

Cos'è un Mutex?

Quando un'applicazione per computer viene avviata, creerà un mutex e lo allegherà a una risorsa. Quando la risorsa viene utilizzata da un thread, è bloccata e altri thread non possono utilizzarla. Se un altro thread vuole utilizzare la stessa risorsa, dovrà fare una richiesta. Quindi quel thread verrà inserito in una coda fino al termine del primo thread con la risorsa. Al termine del primo thread con la risorsa, il blocco verrà rimosso e il thread in attesa nella coda potrà accedere alla risorsa. Se sono presenti più thread in attesa nella coda, viene loro concesso l'accesso a rotazione. In pratica, quando il mutex alterna l'accesso a una risorsa tra più thread, sarà visibile poiché più thread stanno consumando una risorsa contemporaneamente. Ma internamente solo un singolo thread accede alla risorsa in un dato momento.

Qual è la differenza tra Semaphore e Mutex?

Anche se sia i semafori che gli oggetti mutex vengono utilizzati per ottenere l'esclusione reciproca in ambienti di programmazione parallela, presentano alcune differenze. Un oggetto mutex consente solo a 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, gli altri thread che desiderano accedere alla risorsa devono attendere in coda, finché il thread corrente non ha terminato di utilizzare la risorsa.

Consigliato: