LoginSignup
5

More than 5 years have passed since last update.

posted at

updated at

健康診断に例えるデッドロックのアルゴリズム

デッドロックが起きる原理を健康診断に例えてみます。

健康診断をするにあたり、二つのタスクが存在します。
採血とX線を受けることで健康診断が完了します。

①占有順序が同じパターン

A君とB君は採血を受けてからX線を受けることになっています。

A君が先に採血を始めたとして、
採血室を占有しているので、B君は待機しています。

採血室 X線室
A  

B ←待機中
  
  

さて、A君は採血を終えました。
次はA君はX線室へ移ります。

そこで採血室が空いたのでB君の待機状態が解けて
B君は採血室へと移りました。

採血室 X線室
  A

B ←解放!

採血室 X線室
B   A

  
  

次にA君のX線検査が時間がかかってしまい
B君の方が先に採血が終わったとしても
いつかはA君のX線検査は終わるので
B君の待機状態は解けて
結果、無事にお互い健康診断を終えることができます。

採血室 X線室
B ←待機中   A
採血室 X線室
B ←解放!  
採血室 X線室
       B

  
これは採血室にB君が先に入っていたとしても
同様のことが言えますね。

②占有順序が異なるパターン

さて、今度はA君とB君が採血とX線検査を
受ける順番が決まっていません。

A君は先に採血を始めましたが
B君は先にX線検査を始めました。

採血室 X線室
A B

  
  

A君は採血を終えたので隣のX線室へ入ろうとします。
しかし、どうやら中には誰かが入っているようなので
中の人が出てくるまで待機を始めます。

採血室 X線室
A ←待機中   B

  
  

B君もX線室内ではX線検査を終えました。
しかしB君も採血室に入ろうとするも
誰かが入っている為、待機を始めます。

採血室 X線室
A ←待機中   B ←待機中

  
  

この状態ではお互いがいつまで待ち続けても
どちらの部屋も空くことはありません。
これがデッドロックです。

  
こうして二人はいつまでも健康診断を終えることが
出来なくなってしまいました。
めでたしめでたし。(?)

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
5