Il deadlock è la condizione in cui ognuno dei due agenti aspetta le risorse dell'altro. Una risorsa è qualunque cosa (hardware o software) a cui si può accedere in mutua esclusione, es: una stampante, una licenza, una memoria... Le risorse possono essere:
Il busy waiting consiste nell'aspettare la risorsa non pronta in modo bloccante, può essere comodo far svegliare il processo dal sistema operativo o da un timer, ma non è detto che questa funzione sia disponibile, può essere necessario implementarla a mano.
Le condizioni per avere un deadlock sono:
Approcci per risolvere i deadlock:
Per rompere un loop posso aprire gli archi o togliere uno dei nodi.
Un demone è un processo a cui viene ucciso il padre e quindi viene ereditato da init.
Uno spooler consiste in un demone che gestisce in modo esclusivo ad esempio una stampante, e appena gli viene inviato un file da stampare, esso lo manda in stampa. Una politica FIFO per la gestione della coda di stampa è adeguata.
Distributed deadlock detection Viene inviato un messaggio che contiene informazioni su risorsa attesa e chi la attende, se il messaggio torna al mittente con il proprio ID, allora è stato rilevato un ciclo.