Differenza tra semaforo e monitor

Anonim

Semaphore vs Monitor

Semaphore è una struttura dei dati utilizzata per assicurarsi che più processi 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. Monitor è un linguaggio di programmazione che utilizza anche per evitare processi multipli che accedono a una risorsa comune allo stesso tempo garantisce quindi l'esclusione reciproca. I monitor utilizzano variabili condizionali per raggiungere questo compito.

Che cosa è una semafora?

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 Monitor?

Un monitor è un linguaggio di programmazione che consente di controllare l'accesso ai dati condivisi. I monitor incapsulano le strutture dati condivise, le procedure (che operano su strutture di dati condivise) e la sincronizzazione tra invocazioni di procedura concorrenti. Un monitor assicura che i suoi dati non siano affrontati con accessi non strutturati e garantisca che le pedine (che accedano ai dati del monitor attraverso le proprie procedure) interagiscano in modo legittimo. Un monitor garantisce l'esclusione reciproca permettendo ad un solo thread di eseguire qualsiasi procedura di monitoraggio in un dato momento. Se un altro thread tenta di richiamare un metodo nel monitor, mentre un thread sta già eseguendo una procedura nel monitor, la seconda procedura viene bloccata e deve attendere nella coda. Ci sono due tipi di monitor denominati monitor Hoare e monitor Mesa. Esse si differenziano principalmente dalla semantica di pianificazione.

Qual è la differenza tra Semaphore e Monitor?

Anche se i semafori ei monitor sono usati per ottenere l'esclusione reciproca in ambienti di programmazione parallela, essi differiscono dalle tecniche utilizzate per raggiungere questo compito.Nei monitor, il codice che viene utilizzato per ottenere l'esclusione reciproca è in un unico posto e più strutturato, mentre il codice per i semafori viene distribuito come chiamate di attesa e funzioni di segnale. Inoltre, è molto facile commettere errori durante l'implementazione di semafori, mentre c'è una poca probabilità di errori durante l'implementazione dei monitor. Inoltre, i monitor utilizzano le variabili di stato, mentre i semafori non lo fanno.