2013-03-05 12 views
5

Definisco l'esclusione reciproca e il deadlock come di seguito, rispettivamente: La condizione di esclusione reciproca esiste se in ogni momento, ogni risorsa condivisa è assegnata a un solo processo o disponibile. Un insieme di processi è deadlock se ogni processo nel set è in attesa di un evento che solo un altro processo nell'insieme può causare.Se l'esclusione reciproca è garantita, ad esempio con i semafori, il programma è senza deadlock?

Dire, i semafori binari vengono utilizzati, assicurando che solo uno di essi possa entrare nella sua area critica nello stesso momento. Dal momento che ogni processo fa un down poco prima di entrare nella sua area critica e uno dopo averlo lasciato, l'esclusione reciproca è garantita.

Capisco che ci sono quattro condizioni che devono essere tutte valide per lo stallo, una delle quali è la condizione di mutua esclusione (non ci sono due processi contemporaneamente nelle loro sezioni critiche).

Poiché l'esclusione reciproca è garantita, il programma è in questo caso senza deadlock?

Saluti.

risposta

6

Non necessariamente. Immaginate questi due fili:

Thread 1   Thread 2 
============  ============= 
Acquire A   Acquire B 
Acquire B   Acquire A 
Release B   Release A 
Release A   Release B 

Qui, mutua esclusione è infatti garantito - in ogni istante, semafori A e B sono di proprietà di uno dei fili o disponibili systemwide - ma deadlock è ancora possibile se filettatura 1 e 2 ognuno acquisisce il primo blocco (A per Thread 1, B per Thread 2), ma poi si blocca in attesa della risorsa che l'altro sta tenendo.

Spero che questo aiuti!

Problemi correlati