LoginSignup
2
5

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-11-22

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

健康診断をするにあたり、二つのタスクが存在します。
採血と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 ←待機中

  
  

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

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

2
5
0

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
  3. You can use dark theme
What you can do with signing up
2
5