Ogólnie rzecz biorąc, zakleszczenie oznacza, że dwie lub więcej jednostek blokuje niektóre źródła i żaden z nich nie jest w stanie zakończyć, ponieważ blokują źródła w sposób cykliczny.
Jeden przykład:powiedzmy, że mam tabelę A i tabelę B, muszę zrobić jakąś aktualizację w A, a potem w B i postanawiam zablokować obie w momencie użycia (to naprawdę głupie zachowanie, ale teraz spełnia swoje zadanie ). W tym samym momencie ktoś inny robi to samo w odwrotnej kolejności - najpierw blokuje B, potem blokuje A.
Chronologicznie dzieje się tak:
proc1:Zablokuj A
proc2:Zablokuj B
proc1:Lock B - zaczyna czekać, aż proc2 zwolni B
proc2:Lock A - zaczyna czekać, aż proc1 zwolni A
Żaden z nich nigdy się nie skończy. To impas. W praktyce zwykle skutkuje to błędami przekroczenia limitu czasu, ponieważ nie jest pożądane, aby jakiekolwiek zapytanie było zawieszone na zawsze, a system bazowy (np. baza danych) zabije zapytania, które nie kończą się na czas.
Jednym z przykładów impasu w prawdziwym świecie jest zamknięcie kluczyków do domu w samochodzie i kluczyków do samochodu w domu.