I allmänhet betyder dödläge att två eller flera enheter blockerar vissa källor, och ingen av dem kan avsluta, eftersom de blockerar källor på ett cykliskt sätt.
Ett exempel:Låt oss säga att jag har tabell A och tabell B, jag måste göra lite uppdatering i A och sedan B och jag bestämmer mig för att låsa båda vid användningsögonblicket (det här är verkligen dumt beteende, men det tjänar sitt syfte nu ). I samma ögonblick gör någon annan samma sak i motsatt ordning - låser först B, sedan låser A.
Kronologiskt händer detta:
proc1:Lås A
proc2:Lås B
proc1:Lås B - börjar vänta tills proc2 släpper B
proc2:Lås A - börjar vänta tills proc1 släpper A
Ingen av dem kommer någonsin att sluta. Det är ett dödläge. I praktiken resulterar detta vanligtvis i timeout-fel eftersom det inte är önskvärt att ha någon fråga hängande för alltid, och det underliggande systemet (t.ex. databasen) kommer att döda frågor som inte avslutas i tid.
Ett verkligt exempel på ett dödläge är när du låser in dina husnycklar i din bil och dina bilnycklar i ditt hus.