デッドロック

deadlock.png

デッドロックとは何か?

デッドロックとは、あるスレッドが、
別のスレッドからロックされたオブジェクトを待ち続ける。
その「別のスレッド」は、最初のスレッドがロックしたオブジェクトを待ち続けている状態。

スレッドが互いにロック解除を待つために永久に待ち続けている状態
これをデッドロックしたという

デッドロックが起こる条件

  1. 相互排他…..一度に一つのスレッドのみがリソースアクセスできる(リソースへのアクセス数制限がある)
  2. 保持と待機…..既にリソースを持っているスレッドが現在のリソースを解放せず、さらにリソースを要求できる
  3. 優先取得不可….あるスレッドが他のスレッドのリソースを強制的に解放することが出来ない。
  4. 循環待機….2つ以上のスレッドが循環的に他のスレッドのリソースを待っている

これらの条件のどれか4つそろっていると、デッドロックが起こります。
しかし、これらの全ての条件を取り除くのは非常に難しいです。
たとえば、リソースがプリンタだったとすると、一度に1つのスレッドしか使えないですよね?
1の条件を取り除くのは非常に困難です。
なので、デッドロックを防止するアルゴリズムのほとんどは4循環待機を避けることに注力されます。

サポートサイト Wikidot.com