この概念が出た関連問題

この試験の対策ガイド

情報処理安全確保支援士試験 対策ガイド

合格率・勉強法・参考書の選び方をまとめています

見る →
答えと解説を見る(先に解くのがおすすめ)

正解は イ

解説

デッドロックは、複数のタスクが互いに相手の保持する資源の解放を待ち続け、どのタスクも処理を進められなくなる状態です。発生には「相互排他・保持と待機・横取り不可・循環待ち」の4条件がすべて成立する必要があり、いずれか1つを崩せば防止できます。本問のように2タスクが2資源を排他使用する場合、両タスクが資源を獲得する順序を統一すれば「循環待ち」が成立しなくなります。例えば両タスクとも必ず資源1→資源2の順で獲得すれば、一方が資源1を持っている間、もう一方は資源1の解放を待つだけで、互いに資源を1つずつ持ち合って相手を待つという循環構造が決して生じません。したがって選択肢bの「資源獲得の順序を両方のタスクで同じにする」が正解です。実装上は、すべての資源に一意の順序番号を割り当て、各タスクが番号の昇順でのみ資源を獲得するよう規約化する手法(資源順序付け)が、デッドロック防止の代表的な方法として知られています。

なぜ他の選択肢は違うのか

選択肢 ア
「一方のタスクの優先度を高くする」は、どちらのタスクを先にスケジューリングするかに影響するだけで、両タスクが資源を逆順に獲得して持ち合うという循環待ちの構造そのものは解消しません。優先度を上げても、低優先タスクが先に片方の資源を握ってしまえばデッドロックは依然として発生し得るため、防止策にはなりません。
選択肢 ウ
「資源獲得の順序を両方のタスクで逆にする」はデッドロックを防ぐどころか、最も発生しやすい危険な条件です。一方が資源1→2、他方が資源2→1の順で獲得すると、両者が互いに相手の持つ資源の解放を待つ循環待ちがそのまま成立してしまい、デッドロックを積極的に誘発してしまいます。循環待ちをわざわざ作り出してしまう設定であり、デッドロックの防止策どころか、最も避けるべき危険な構成だといえます。
選択肢 エ
「両方のタスクの優先度を同じにする」も資源獲得順序の循環構造とは無関係であり、デッドロックを防止できません。優先度の同一化はスケジューリングの公平性に関わるだけで、資源の保持と待機による循環待ちの成立そのものを妨げる効果はないため、対策として機能しません。スケジューリングの公平性に関わるだけで、資源の保持と待機による循環待ちそのものを断ち切る効果はなく、防止策になりません。

解くときのポイント

デッドロックの4条件(相互排他・保持と待機・横取り不可・循環待ち)のいずれか1つを崩せば防止できる。資源獲得順序を全タスクで統一する=循環待ちの破壊が定番手法。「逆順」は最も危険なので注意。