Generelt betyder dødvande, at to eller flere enheder blokerer nogle kilder, og ingen af dem er i stand til at afslutte, fordi de blokerer kilder på en cyklisk måde.
Et eksempel:Lad os sige, at jeg har tabel A og tabel B, jeg skal lave en opdatering i A og derefter B, og jeg beslutter mig for at låse dem begge i brugsøjeblikket (dette er virkelig dum opførsel, men det tjener formålet nu ). I samme øjeblik gør en anden det samme i modsat rækkefølge - låser B først, derefter låser A.
Kronologisk sker dette:
proc1:Lås A
proc2:Lås B
proc1:Lås B - begynder at vente, indtil proc2 frigiver B
proc2:Lås A - begynder at vente, indtil proc1 frigiver A
Ingen af dem bliver nogensinde færdige. Det er et dødvande. I praksis resulterer dette normalt i timeout-fejl, da det ikke ønskes at have nogen forespørgsel hængende for evigt, og det underliggende system (f.eks. databasen) vil dræbe forespørgsler, der ikke afsluttes i tide.
Et virkeligt eksempel på dødvande er, når du låser dine husnøgler i din bil og dine bilnøgler i dit hus.