Em geral, deadlock significa que duas ou mais entidades estão bloqueando algumas fontes, e nenhuma delas consegue finalizar, pois estão bloqueando fontes de forma cíclica.
Um exemplo:digamos que eu tenha a tabela A e a tabela B, preciso fazer alguma atualização em A e depois em B e decido bloquear os dois no momento do uso (esse é um comportamento realmente estúpido, mas serve ao propósito agora ). No mesmo momento, outra pessoa faz a mesma coisa na ordem oposta - bloqueia B primeiro, depois bloqueia A.
Cronologicamente, isso acontece:
proc1:Bloqueio A
proc2:Bloqueio B
proc1:Lock B - começa a esperar até que o proc2 libere B
proc2:Lock A - começa a esperar até que o proc1 libere A
Nenhum dos dois vai terminar. Isso é um impasse. Na prática, isso geralmente resulta em erros de tempo limite, pois não é desejável que nenhuma consulta fique suspensa para sempre, e o sistema subjacente (por exemplo, o banco de dados) matará as consultas que não terminarem a tempo.
Um exemplo do mundo real de um impasse é quando você tranca as chaves de sua casa em seu carro e as chaves do seu carro em sua casa.