応用情報技術者 2022年 秋期 午前2 問16
問題文
二つのタスクが共用する二つの資源を排他的に使用するとき、デッドロックが発生するおそれがある。このデッドロックの発生を防ぐ方法はどれか。
選択肢
ア:一方のタスクの優先度を高くする。
イ:資源獲得の順序を両方のタスクで同じにする。(正解)
ウ:資源獲得の順序を両方のタスクで逆にする。
エ:両方のタスクの優先度を同じにする。
二つのタスクが共用する二つの資源を排他的に使用するときのデッドロック防止【午前2 解説】
要点まとめ
- 結論:デッドロックを防ぐには、資源獲得の順序を両方のタスクで同じにすることが重要です。
- 根拠:異なる順序で資源を獲得すると、互いに相手の資源を待つ状態が発生しやすく、これがデッドロックの原因となります。
- 差がつくポイント:資源の獲得順序を統一することで、循環待ち(デッドロックの必要条件の一つ)を回避できる点を理解しているかが鍵です。
正解の理由
イ: 資源獲得の順序を両方のタスクで同じにする。
デッドロックは、複数のタスクが互いに相手の資源を待つ「循環待ち」が発生することで起こります。資源獲得の順序を統一すれば、循環待ちが発生しにくくなり、デッドロックを防止できます。例えば、両方のタスクが「資源A→資源B」の順で獲得すれば、片方が資源Aを獲得している間にもう片方は資源Aを待つため、資源Bの獲得で競合しません。
デッドロックは、複数のタスクが互いに相手の資源を待つ「循環待ち」が発生することで起こります。資源獲得の順序を統一すれば、循環待ちが発生しにくくなり、デッドロックを防止できます。例えば、両方のタスクが「資源A→資源B」の順で獲得すれば、片方が資源Aを獲得している間にもう片方は資源Aを待つため、資源Bの獲得で競合しません。
よくある誤解
優先度を変えるだけではデッドロックは防げません。優先度調整はスケジューリングの問題であり、資源の獲得順序の問題とは異なります。
解法ステップ
- デッドロックの原因となる「循環待ち」の概念を理解する。
- 複数の資源を複数のタスクが排他的に使う場合、獲得順序が異なると循環待ちが発生しやすいことを確認する。
- 資源獲得の順序を統一することで、循環待ちを防げることを知る。
- 選択肢の中で「資源獲得の順序を両方のタスクで同じにする」ものを選ぶ。
選択肢別の誤答解説
- ア: 一方のタスクの優先度を高くする。
優先度はスケジューリングに関するもので、資源の獲得順序とは無関係。デッドロック防止にはならない。 - イ: 資源獲得の順序を両方のタスクで同じにする。
正解。循環待ちを防ぎ、デッドロックを回避できる。 - ウ: 資源獲得の順序を両方のタスクで逆にする。
逆順にすると互いに相手の資源を待つ状態が生まれやすく、デッドロックのリスクが高まる。 - エ: 両方のタスクの優先度を同じにする。
優先度を同じにしても資源の獲得順序が異なればデッドロックは防げない。
補足コラム
デッドロックの4条件は「相互排他」「保持・待機」「非奪取」「循環待ち」です。このうち「循環待ち」を防ぐのが資源獲得順序の統一です。OSや並行処理の設計では、資源管理のルールを明確にしてデッドロックを未然に防ぐことが重要です。
FAQ
Q: 優先度を変えることでデッドロックは防げますか?
A: いいえ。優先度はタスクの実行順序に影響しますが、資源の獲得順序が異なる場合はデッドロックを防げません。
A: いいえ。優先度はタスクの実行順序に影響しますが、資源の獲得順序が異なる場合はデッドロックを防げません。
Q: 資源獲得の順序を統一するのはなぜ効果的ですか?
A: 循環待ちが発生しにくくなり、デッドロックの必要条件を満たさなくなるためです。
A: 循環待ちが発生しにくくなり、デッドロックの必要条件を満たさなくなるためです。
関連キーワード: デッドロック、資源獲得順序、循環待ち、排他制御、並行処理

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

