Domanda

Questo è principalmente sulla comprensione del concetto, che mi confonde.

Mutex significa che un filo impiega il controllo dell'accesso di risorsa condivisa, operazioni impegnata e sblocca, allora solo altro thread può accedere al blocco

, mentre binario semaforo è come un filo può accedere alla risorsa condivisa ma l'accesso guadagnando alla serratura, mentre un altro thread può sbloccarlo

In ultima domanda che ho visto nel corso qui , è stato detto che "semaphores are more suitable for some synchronization problems like producer-consumer".

Il mio questione è, per esempio, se filo produttore ha guadagnato serratura e riempiendo un po 'di coda con i dati, e consumatore al tempo stesso la sblocca, non c'è alcun problema di concorrenza ??

È stato utile?

Soluzione

Cercherò di risolvere la confusione del mio meglio. Spiegherò i concetti nel modo in cui sono tradizionalmente definiti. Il problema è che la gente inizia a mescolare il significato di molti di questi concetti e un sacco di confusione derivano da questo.

Ogni volta che abbiamo un pezzo di codice che modifica un po 'di memoria (ad esempio una variabile) che è condivisa tra i diversi processi o thread, abbiamo una sezione critica . Se non ci prendiamo cura di sincronizzare questo pezzo di codice correttamente allora avremo insetti. Un esempio di una sezione critica è un produttore aggiunta di un elemento di un contenitore comune di qualche tipo.

Un modo per sincronizzare sezioni critiche è di applicare mutua esclusione . mezzi di mutua esclusione che solo un processo o thread alla volta può eseguire la sezione critica e ottenere l'accesso al pezzo condiviso di memoria. Si noti che la mutua esclusione non è un meccanismo è di per sé, è un principio che possiamo imporre con mezzi diversi. Alcune persone parlano di serrature e semafori binari come mutex ma che mescola i concetti in un modo che porterà a confusione.

binario semaforo è un modo di imporre la mutua esclusione. Ogni volta che un processo vuole ottenere l'accesso al mutex può acquisire il semaforo. Questa operazione blocca se c'è un altro processo che tiene il semaforo in quel momento. Perciò abbiamo mutua esclusione. Una volta che un processo è fatto con il mutex poi rilascia il semaforo lasciando che altri processi in mutex. In questo modo si può realizzare la mutua esclusione con un semaforo binario, ma è in alcun modo l'unica possibile applicazione di un semaforo binario.

I semafori sono bello per problemi di produttore-consumatore perché possono assumere un numero naturale arbitrario, non solo 0 e 1 nel caso di semafori binari. Questo è molto utile quando la sincronizzazione problemi produttore-consumatore, perché si può lasciare che il valore di un semaforo contiene il numero di elementi a disposizione. Se il numero di elementi scende a zero, allora le operazioni con i semafori automaticamente bloccare.

mi rendo conto la spiegazione del problema produttore-consumatore è un po 'breve e vi incoraggio a esaminare soluzioni che utilizza i semafori e anche confrontare queste soluzioni per altre soluzioni che utilizza altri sincronizzazione costruisce, come monitor o un messaggio che passa. Ho trovato ad essere molto illuminante.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top