Um deadlock é um estado em que duas ou mais threads estão cada uma bloqueada para sempre, cada uma esperando por um recurso que outra mantém. Nada progride.
As quatro condições necessárias (de Coffman)
As quatro precisam valer ao mesmo tempo — remova qualquer uma e o deadlock se torna impossível:
1. Mutual exclusion → a resource is held exclusively (only one holder at a time)
2. Hold and wait → a thread holds one resource while waiting to acquire another
3. No preemption → resources can't be forcibly taken; only released voluntarily
4. Circular wait → a cycle: T1 waits for R2 (held by T2), T2 waits for R1 (held by T1)
