メインコンテンツへ
ソフトウェアデッドロック

デッドロック(Deadlock)が発生するための必要条件(コフマン条件)として誤っているものはどれか。

ア.相互排除(Mutual Exclusion):資源は同時に複数のプロセスが使用できる。正解
イ.占有と待機(Hold and Wait):プロセスが資源を保持したまま他の資源を待つ。
ウ.非プリエンプション(No Preemption):保持中の資源を強制的に取り上げられない。
エ.循環待機(Circular Wait):プロセスが環状に資源を待ち合っている。

解説

デッドロック4条件は「必要条件」。1つでも崩せばデッドロックを防げます。問題は「誤っているもの」を選ぶので、説明が逆になっているアが正解です。

なぜ ア が正解か

コフマンの4条件(デッドロックの必要条件): ① 相互排除: 資源は「1プロセスのみ」が使用可能(共有不可)← アは「複数使用可能」と逆の説明になっている ② 占有と待機: 資源を持ちながら他の資源を待つ ③ 非プリエンプション: 保持資源を強制取得できない ④ 循環待機: A→Bの資源を待ち→B→Aの資源を待つという環 「資源を同時に複数使用できる」なら相互排除が成立しないため、デッドロックは起きません。アの説明は「相互排除の否定」であり、コフマン条件の説明として誤りです。

なぜ イ は間違いか

占有と待機はデッドロックの正しい必要条件です。「資源を持ちながら別の資源を待つ」という状態がなければデッドロックは発生しません。これは正しい説明です。

なぜ ウ は間違いか

非プリエンプションはデッドロックの正しい必要条件です。プロセスから資源を強制的に取り上げられれば循環待機が解消できます。これは正しい説明です。

なぜ エ は間違いか

循環待機はデッドロックの正しい必要条件です。プロセスが環状に待ち合う構造がなければデッドロックは成立しません。これは正しい説明です。

出典: AI生成問題(学習用)