令和4年度 秋期 プロジェクトマネージャ試験 データベーススペシャリスト試験 エンベデッドシステムスペシャリスト試験 システム監査技術者試験 情報処理安全確保支援士試験 午前 I 問題 【共通】 問6
テクノロジOS・ソフトウェアタスク管理・排他制御
二つのタスクが共用する二つの資源を排他的に使用するとき,デッドロックが発生するおそれがある。このデッドロックの発生を防ぐ方法はどれか。
解答・解説
正解: イ. 資源獲得の順序を両方のタスクで同じにする。
デッドロックとは、複数のタスクが互いに相手が占有している資源の解放を待ち合い、永遠に処理が進まなくなってしまう状態のことです。
二つのタスク(タスクA、タスクB)が二つの資源(資源1、資源2)を共有する場合を考えます。
もし、タスクAが資源1を獲得し、タスクBが資源2を獲得した状態で、タスクAが資源2を、タスクBが資源1を要求すると、互いに待ち状態に陥りデッドロックが発生します。
これを防ぐためには、すべてのタスクで資源を獲得する順序を同じにする(例:常に資源1→資源2の順に獲得する)ことが有効です。
このように取り決めると、一方のタスクが最初の資源を獲得している間、他方のタスクは最初の資源の空きを待つことになり、もう一つの資源を先に確保してしまうことがなくなるため、デッドロックの発生を防ぐことができます。
したがって、正解は「資源獲得の順序を両方のタスクで同じにする。」となります。
各選択肢の解説
- ア(一方のタスクの優先度を高くする。):
優先度の違いは、資源要求が同時に起こった際の割り当て順序には影響しますが、実行のタイミングによっては相互に資源をロックしてしまう状態を防ぐことはできないため、根本的な解決にはなりません。 - イ(資源獲得の順序を両方のタスクで同じにする。):
正解です。 資源獲得の順序を統一することで、デッドロックの発生条件の一つである「循環待ち」を防ぐことができます。 - ウ(資源獲得の順序を両方のタスクで逆にする。):
獲得順序を逆にすると、互いに相手が次に必要な資源を先に占有し合う形になりやすく、最もデッドロックが発生しやすい状態となります。 - エ(両方のタスクの優先度を同じにする。):
優先度を同じにしても、実行のタイミングによって互いの資源を待ち合う状況は発生し得るため、デッドロックを防ぐことはできません。