In generale, deadlock significa che due o più entità stanno bloccando alcune fonti e nessuna di esse è in grado di terminare, perché stanno bloccando le fonti in modo ciclico.
Un esempio:diciamo che ho la tabella A e la tabella B, devo fare qualche aggiornamento in A e poi in B e decido di bloccarle entrambe al momento dell'uso (questo è un comportamento davvero stupido, ma ora serve al suo scopo ). Nello stesso momento, qualcun altro fa la stessa cosa nell'ordine opposto:prima blocca B, poi blocca A.
Cronologicamente, questo accade:
proc1:Blocca A
proc2:Blocca B
proc1:Lock B - inizia ad aspettare fino a quando proc2 rilascia B
proc2:Lock A - inizia ad aspettare fino a quando proc1 rilascia A
Nessuno dei due finirà mai. Questo è un punto morto. In pratica, questo di solito si traduce in errori di timeout poiché non si desidera che nessuna query sia sospesa per sempre e il sistema sottostante (ad esempio il database) ucciderà le query che non finiscono in tempo.
Un esempio reale di deadlock è quando chiudi le chiavi di casa in macchina e le chiavi della macchina in casa tua.