TL;DR
E. Coffman らが 1971 年の論文「System Deadlocks」で示した、デッドロックが起きるための 4 つの必要条件。デッドロックが起きるのは、この 4 つがすべて成り立つときに限られる。
仕組み
Mutual Exclusion(相互排他)
あるリソースは、一度に 1 つのスレッド(プロセス)しか使えない。
Hold and Wait(保持と待機)
あるスレッドが、すでにロックを保持したまま、他のリソースを待っている。
No Preemption(プリエンプションなし)
他のスレッドが保持しているリソースを、強制的に奪えない。
Circular Wait(循環待機)
複数のスレッドが、循環するようにリソースを待っている。