Um processo no sistema operacional usa recursos da seguinte maneira. 
1) Solicita um recurso 
2) Use o recurso 
3) Libera o recurso 

<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="374" src="https://www.youtube.com/embed/onkWXaXAgbY?feature=oembed" width="665"></iframe>

Deadlock é uma situação em que um conjunto de processos é bloqueado porque cada processo está mantendo um recurso e esperando por outro recurso adquirido por algum outro processo. 
Considere um exemplo em que dois trens estão vindo em direção um ao outro na mesma linha e há apenas uma linha, nenhum dos trens pode se mover uma vez que estão na frente um do outro. Uma situação semelhante ocorre em sistemas operacionais quando há dois ou mais processos que retêm alguns recursos e aguardam recursos retidos por outro (s). Por exemplo, no diagrama abaixo, o Processo 1 está retendo o Recurso 1 e aguardando o recurso 2, que é adquirido pelo processo 2, e o processo 2 está aguardando o recurso 1. 
 

impasse

O deadlock pode surgir se as quatro condições a seguir forem mantidas simultaneamente (Condições necessárias) 
Exclusão mútua: um ou mais de um recurso não são compartilháveis ​​(apenas um processo pode ser usado por vez) 
Hold and Wait: Um processo está mantendo pelo menos um recurso e esperando por recursos. 
Sem preempção: um recurso não pode ser obtido de um processo, a menos que o processo libere o recurso. 
Espera circular: um conjunto de processos está esperando um pelo outro em forma circular. 

Métodos para lidar com deadlock 
Existem três maneiras de lidar com deadlock 
1) Prevenção ou prevenção de deadlock: A ideia é não deixar o sistema em um estado de deadlock. 
Pode-se ampliar cada categoria individualmente. A prevenção é feita negando uma das condições necessárias acima mencionadas para o impasse. 
A evitação é de natureza futurística. Ao usar a estratégia de “Evitação”, temos que fazer uma suposição. Precisamos garantir que todas as informações sobre os recursos de que o processo necessitará sejam conhecidas por nós antes da execução do processo. Usamos o algoritmo de Banker (que por sua vez é um presente de Dijkstra) para evitar um impasse. 

2) Detecção e recuperação de deadlock: deixe o deadlock ocorrer e faça a preempção para tratá-lo assim que ocorrer. 

3) Ignore o problema completamente: Se o deadlock for muito raro, deixe-o acontecer e reinicie o sistema. Essa é a abordagem que o Windows e o UNIX adotam. 

Exercício:  
  1) Suponha n processos, P1,…. Pn compartilha unidades de recursos idênticas, que podem ser reservadas e liberadas uma de cada vez. O requisito máximo de recursos do processo Pi é Si, onde Si> 0. Qual dos seguintes é uma condição suficiente para garantir que o impasse não ocorra? (GATE CS 2005) 
 

(A)
(B)
(C)
(D)

Para obter uma solução, consulte a pergunta 4 de https://www.geeksforgeeks.org/operating-systems-set-16/ 

Veja QUIZ ON DEADLOCK para mais perguntas. 

Referências:  
http://www2.latech.edu/~box/os/ch07.pdf  
http://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/7_Deadlocks.html 

Escreva comentários se encontrar algo incorreto ou se quiser compartilhar mais informações sobre o tópico discutido acima