デッドロックが起きる原理を健康診断に例えてみます。
健康診断をするにあたり、二つのタスクが存在します。
採血と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 ←待機中 |
この状態ではお互いがいつまで待ち続けても
どちらの部屋も空くことはありません。
これがデッドロックです。
こうして二人はいつまでも健康診断を終えることが
出来なくなってしまいました。
めでたしめでたし。(?)