Deadlock
Un deadlock è una condizione in cui un programma non può accedere a una risorsa necessaria per continuare. Quando un'applicazione in esecuzione entra in deadlock, può "bloccarsi" o smettere di rispondere.
Le risorse, come i dati salvati o memorizzati nella cache, possono essere bloccate quando vengono utilizzate da uno specifico processo all'interno di un programma. Il blocco dei dati impedisce ad altri processi di sovrascriverli prematuramente. Se un processo o una query deve accedere a dati bloccati, ma il processo che li blocca non li rilascia, può verificarsi un deadlock.
Ad esempio, la situazione seguente causerà un deadlock tra due processi:
- Il processo 1 richiede la risorsa B al processo 2.
- La risorsa B è bloccata mentre il processo 2 è in esecuzione.
- Il processo 2 richiede la risorsa A al processo 1 per terminare l'esecuzione.
- La risorsa A è bloccata mentre il processo 1 è in esecuzione.
Il risultato è che il processo 1 e il processo 2 aspettano che l'altro termini. Poiché nessuno dei due processi può continuare finché l'altro non completa l'esecuzione, si crea un deadlock.
Evitare i deadlock
Gli sviluppatori possono prevenire i deadlock evitando condizioni di blocco nella logica di programmazione. Ad esempio, invece di fare affidamento reciproco tra due processi, il codice sorgente può essere scritto in modo che ogni thread termini prima che un altro thread abbia bisogno delle sue risorse. Assicurandosi che i dati siano accessibili quando servono, i programmatori possono proteggere le loro applicazioni da blocchi o arresti anomali.
NOTE: I deadlock possono verificarsi anche quando vengono eseguite due o più query su un database. I database transazionali bloccano i record attivi, impedendo ad altre query di accedervi. Se un processo non può accedere a un record bloccato, può verificarsi un deadlock del database.
Metti alla prova le tue conoscenze