応用情報技術者 2019年 春期 午前2 問18
問題文
二つのタスクが共用する二つの資源を排他的に使用するとき、デッドロックが発生するおそれがある。このデッドロックの発生を防ぐ方法はどれか。
選択肢
ア:一方のタスクの優先度を高くする。
イ:資源獲得の順序を両方のタスクで同じにする。(正解)
ウ:資源獲得の順序を両方のタスクで逆にする。
エ:両方のタスクの優先度を同じにする。
二つのタスクが共用する二つの資源を排他的に使用するときのデッドロック防止【午前2 解説】
要点まとめ
- 結論:デッドロックを防ぐには、資源獲得の順序を両方のタスクで統一することが最も効果的です。
- 根拠:異なる順序で資源を獲得すると、互いに相手の資源解放を待つ状態が発生しやすく、これがデッドロックの原因となります。
- 差がつくポイント:優先度操作ではデッドロックを防げず、資源獲得の順序管理が鍵であることを理解しているかが重要です。
正解の理由
イ: 資源獲得の順序を両方のタスクで同じにする。
デッドロックは複数のタスクが互いに相手の資源解放を待つ状態で発生します。資源獲得の順序を統一することで、循環待ちの状態を防ぎ、デッドロックの発生を回避できます。例えば、両方のタスクが「資源A→資源B」の順で獲得すれば、片方が資源Aを獲得している間にもう片方は資源Aの獲得を待つため、資源Bの獲得で競合しません。
デッドロックは複数のタスクが互いに相手の資源解放を待つ状態で発生します。資源獲得の順序を統一することで、循環待ちの状態を防ぎ、デッドロックの発生を回避できます。例えば、両方のタスクが「資源A→資源B」の順で獲得すれば、片方が資源Aを獲得している間にもう片方は資源Aの獲得を待つため、資源Bの獲得で競合しません。
よくある誤解
優先度を変えるだけではデッドロックは防げません。優先度はスケジューリングに影響しますが、資源の獲得順序が異なるとデッドロックは発生します。
解法ステップ
- デッドロックの原因を理解する(相互に資源を待つ循環待ち状態)。
- 資源獲得の順序が異なると循環待ちが発生しやすいことを確認。
- 資源獲得の順序を統一する方法がデッドロック防止に有効と判断。
- 選択肢の中で資源獲得順序を統一するものを選ぶ。
選択肢別の誤答解説
- ア: 一方のタスクの優先度を高くする。
→ 優先度はスケジューリングに影響するが、資源の獲得順序が異なればデッドロックは防げない。 - イ: 資源獲得の順序を両方のタスクで同じにする。
→ 正解。循環待ちを防ぎ、デッドロックを回避できる。 - ウ: 資源獲得の順序を両方のタスクで逆にする。
→ 逆順にすると循環待ちが発生しやすく、デッドロックのリスクが高まる。 - エ: 両方のタスクの優先度を同じにする。
→ 優先度を同じにしても資源獲得順序が異なればデッドロックは防げない。
補足コラム
デッドロックの4条件は「相互排他」「保持と待機」「非奪取」「循環待ち」です。これらのうち「循環待ち」を防ぐために資源獲得の順序を統一する方法は、実務でもよく使われる基本的な対策です。優先度制御はデッドロック防止には直接効果がありませんが、優先度逆転問題の解決には重要です。
FAQ
Q: なぜ優先度を変えてもデッドロックは防げないのですか?
A: 優先度はCPUの実行順序に影響しますが、資源の獲得順序が異なると互いに資源を待つ状態が発生し、デッドロックは解消されません。
A: 優先度はCPUの実行順序に影響しますが、資源の獲得順序が異なると互いに資源を待つ状態が発生し、デッドロックは解消されません。
Q: 資源獲得の順序を統一するのは具体的にどう実装すればよいですか?
A: 例えば、全てのタスクが資源Aを先に獲得し、その後資源Bを獲得するルールを設けることで、循環待ちを防止します。
A: 例えば、全てのタスクが資源Aを先に獲得し、その後資源Bを獲得するルールを設けることで、循環待ちを防止します。
関連キーワード: デッドロック、資源獲得順序、循環待ち、排他制御、優先度制御

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

