エンベデッドシステムスペシャリスト 2014年 午前2 問07
問題文
二つのタスクが共用する二つの資源を排他的に使用するとき、デッドロックが発生するおそれがある。このデッドロックの発生を防ぐ方法はどれか。
選択肢
ア:一方のタスクの優先度を高くする。
イ:資源獲得の順序を両方のタスクで同じにする。(正解)
ウ:資源獲得の順序を両方のタスクで逆にする。
エ:両方のタスクの優先度を同じにする。
🔒 解説は解答すると表示されます
デッドロックの予防【午前2解説】
正解の理由
正解はイです。二つのタスクが複数の資源を必要とするとき、どちらのタスクも同じ順序で資源を獲得するようにすれば、互いに相手の資源を待ち続ける状態を防げます。
例えば、資源を 、 とし、両方のタスクが「 を獲得してから を獲得する」と決めます。この場合、一方のタスクが を獲得していれば、もう一方は の獲得を待つことになります。先に を獲得してから を待つタスクは生じないため、資源を互いに待つ循環状態になりません。
解法ステップ
- デッドロックでは、タスクが資源を保持したまま、別の資源の解放を待つことがあります。
- 発生を防ぐには、タスク間で資源を待つ関係が循環しないようにします。
- 資源獲得の順序を統一すれば、待ち関係の循環を防げます。
選択肢別の誤答解説
-
ア:一方のタスクの優先度を高くする。
優先度はタスクの実行順に関係しますが、資源を排他的に使用している状況そのものは解消しません。優先度を高くしても、必要な資源を別のタスクが保持していれば待ち続ける可能性があります。 -
イ:資源獲得の順序を両方のタスクで同じにする。
正解です。資源を待つ関係の循環が起きないようにできます。 -
ウ:資源獲得の順序を両方のタスクで逆にする。
例えば一方が 、もう一方が を先に獲得すると、各タスクがもう一方の資源を待つ状態になり、デッドロックが起きるおそれがあります。 -
エ:両方のタスクの優先度を同じにする。
優先度を同じにしても、資源の獲得順序や保持状態は変わりません。デッドロックを防ぐ方法にはなりません。
よくある誤解
-
タスクの優先度を調整すれば、デッドロックを防げると思う
優先度の調整は実行順の制御であり、資源の待ち合わせによる循環を直接なくすものではありません。 -
資源の獲得順序を逆にすれば、競合を避けられると思う
タスクごとに順序を逆にすると、互いに相手の資源を待つ状態を生みやすくなります。 -
同じ順序なら、待ち時間も発生しないと思う
資源が使用中であれば待ち時間は起こり得ます。防げるのは、待ち関係が循環してデッドロックになることです。
補足コラム
資源に順序を付け、すべてのタスクがその順序に従って資源を獲得する方法は、デッドロックの必要条件の一つである「循環待ち」を防ぐ考え方です。資源の獲得順序をシステム全体で統一することで、複数のタスクが互いの資源を待つ循環を作れなくなります。
FAQ
Q. 同じ順序で資源を獲得すれば、資源の競合はなくなりますか?
A. 競合や待ち時間は発生することがあります。ただし、待ち関係が循環するデッドロックを防ぎやすくなります。
A. 競合や待ち時間は発生することがあります。ただし、待ち関係が循環するデッドロックを防ぎやすくなります。
Q. 資源が二つではなく複数ある場合も同じ考え方ですか?
A. はい。資源に共通の順序を定め、すべてのタスクがその順序どおりに獲得するようにします。
A. はい。資源に共通の順序を定め、すべてのタスクがその順序どおりに獲得するようにします。
関連キーワード: デッドロック、循環待ち、資源獲得順序、排他制御、タスク管理

\ せっかくなら /
エンベデッドシステムスペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

