5.2 Deadlock

In molte applicazioni un processo può avere bisogno di accedere in modo esclusivo non ad una sola risorsa bensi' a molte. Supponiamo che un processo A necessiti della risorsa r1 e la ottiene, analogamente un processo B necessità e ottiene la risorsa r2. A questo punto A chiede l'uso della risorsa r2 ma la otterrà solo quando verrà rilasciata da B , sfortunatamente B chiede l'uso di r1 che è già in uso da A,a questo punto i processi entrano in attesa per un tempo infinito. Una situazione di questo tipo è detta deadlock. Per evitare lo stallo esistono almeno tre strategie: 1.Prevenzione 2.Riconoscimento e recupero 3.Indifferenza



5.2.1 Prevenzione

Si impediscono le condizioni ritenute critiche per il sistema. Si considerano in maniera accurata gli accessi esclusivi ad una risorsa, si evitano gli accumuli di risorse, cosa che però è molto difficile da eliminare, le inibizioni del pre-rilascio e l'attesa circolare. La prevenzione si può fare ad ogni richiesta di accesso, verificando se questo può portare ad uno stallo, ma in questo caso la verifica è un onore pesante e in caso affermativo non è ben chiaro cosa bisogna fare. Si può anche chiedere preventivamente ad ogni processo quali risorse impiegherà in modo da ordinarli in maniera conveniente.



5.2.2 Riconoscimento e recupero

Si ammette e si tollera il verificarsi di uno stallo avendo però la capacità di invocare una procedura di recupero.



5.2.3 Indifferenza

Si considera molto bassa la possibilità di uno stallo e non si prende nessuna precauzione contro il suo verificarsi.