三つの資源X〜Zを占有して処理を行う四つのプロセスA〜Dがある。
各プロセスは処理の進行に伴い,表中の数値の順に資源を占有し,実行終了時に三つの資源を一括して解放する。
プロセスAと同時にもう一つプロセスを動かした場合に,デッドロックを起こす可能性があるプロセスはどれか。
〔資源の占有順序〕
プロセス|資源X|資源Y|資源Z/A|1|2|3/B|1|2|3/C|2|3|1/D|3|2|1
正答2
解説
正解は2です。
デッドロックは、複数のプロセスが互いに相手の占有する資源の解放を待ち続け、処理が進まなくなる状態です。
資源を占有する順序が、プロセス間で異なる場合に起こる可能性があります。
プロセスAの占有順序はX、Y、Zです。
【処理の流れ】
Bの占有順序はAと同じX、Y、Zなので、先にXを得た方が残りも順に得られ、デッドロックは起きません。
Cの占有順序はZ、X、Yです。
AがXを、CがZを占有すると、AはZを、CはXを待つ状態になり得ます。
このときAとCが互いに待ち合い、デッドロックになります。
Dの占有順序はZ、Y、Xです。
AがXを、DがZを占有したあと、AがYを得ると、AはZを、DはYを待つことになります。
この場合もデッドロックになり得ます。
【選択肢別解説】
1:× BはAと同じ順序で資源を占有するため、デッドロックは起きません。
Bを含めているので誤りです。
2:○ CとDはどちらもAと異なる順序で資源を占有するため、Aとの間でデッドロックを起こす可能性があります。
3:× Cだけではありません。
Dも、AがX、DがZを先に占有した場合にデッドロックになり得ます。
4:× Dだけではありません。
Cも、AがX、CがZを先に占有した場合にデッドロックになり得ます。
【ポイント】
すべてのプロセスが同じ順序で資源を占有すれば、デッドロックは防げます。
これは資源の占有順序を統一するという代表的なデッドロック回避策です。