デッドロックの防止|科目A-1 令和7年 秋期午前試験 問18

出典:令和7年秋期 午前 問18 分野:ソフトウェア / オペレーティングシステム
二つのタスクが共用する二つの資源を排他的に使用するとき,デッドロックが発生するおそれがある。このデッドロックの発生を防ぐ方法はどれか。
  • ア:一方のタスクの優先度を高くする。
  • イ:資源獲得の順序を両方のタスクで同じにする。
  • ウ:資源獲得の順序を両方のタスクで逆にする。
  • エ:両方のタスクの優先度を同じにする。
解説

デッドロックは、複数のタスクが互いに相手の保持している資源の解放を待ち続け、処理が進まなくなる状態です。

例えば、タスク1が資源Aを獲得してから資源Bを待ち、タスク2が資源Bを獲得してから資源Aを待つと、互いに待ち続ける状態になります。

デッドロック

このようなデッドロックを防ぐには、すべてのタスクで資源を獲得する順序を同じにします。例えば、必ず資源Aを獲得してから資源Bを獲得する、と決めておけば、資源Aと資源Bを逆順に保持して待ち合う状態を避けられます。

したがって、が適切です。

❌他選択肢が誤りの理由
ア:一方のタスクの優先度を高くする。
⇒タスクの優先度を変えても、資源を保持したまま互いに相手の資源を待つ状況は起こり得ます。デッドロックを防ぐには、優先度ではなく、資源獲得の順序などを設計する必要があります。
ウ:資源獲得の順序を両方のタスクで逆にする。
⇒両方のタスクで資源獲得の順序を逆にするという説明は、デッドロック防止としては不適切です。重要なのは、どちらの順序にするかではなく、すべてのタスクで同じ順序に統一することです。
エ:両方のタスクの優先度を同じにする。
⇒優先度を同じにしても、片方が資源Aを保持し、もう片方が資源Bを保持して互いに待つ状態は防げません。デッドロック防止には、資源獲得順序の統一などが有効です。
TSUNAGARU-ADVICE

まず押さえたいこと

デッドロックは、複数のタスクが互いに相手の持っている資源を待ち続け、処理が進まなくなる状態です。二つの資源を排他的に使う場合は、各タスクが資源を取る順序をそろえることで、循環待ちを防げます。資源獲得の順序を統一することが重要です。

迷ったときの判断軸

優先度を変えても、片方が一つ目の資源を持ったまま、もう片方の資源を待つ構造が残ればデッドロックは起こり得ます。逆に、資源獲得の順序を逆にすると、一方が資源1、もう一方が資源2を持って待ち合う形になりやすいため危険です。順序を同じにする表現に注目しましょう。

科目Bにつなげるために

特にプロフェッショナルデジタルスキル(システム)試験合格を目指す方は、デッドロックをOSや並行処理の用語として覚えるだけでなく、共有資源を使う設計でどの順序でロックを取るかという実装上の問題として理解しておくと有効です。