問18 デッドロックを防ぐ方法

応用情報​技術者試験 令和7年度 秋期 午前、全80問のうちの問18。

出典:令和7年度 秋期 応用情報技術者試験 午前 問18

二つのタスクが共用する二つの資源を排他的に使用するとき,デッドロックが発生するおそれがある。このデッドロックの発生を防ぐ方法はどれか。

  1. ア一方のタスクの優先度を高くする。
  2. イ資源獲得の順序を両方のタスクで同じにする。
  3. ウ資源獲得の順序を両方のタスクで逆にする。
  4. エ両方のタスクの優先度を同じにする。
答えと解説を開く

正解はイです。

デッドロックは、タスク 1 が資源 X を持ったまま Y を待ち、タスク 2 が Y を持ったまま X を待つ、のように、お互いが相手の持つ資源を待って両方とも進めなくなる状態です。これは、2 つのタスクが資源を逆の順で取りに行くと起きます。両方とも「X を取ってから Y を取る」と同じ順にすれば、X を取れた方だけが Y に進み、もう一方は X が空くのを待つだけなので、待ち合いの輪ができません。だから正解はイです。

ほかの選択肢が違う理由

  • ア優先度は、どちらを先に動かすかを決めるだけです。資源を持ったまま待つ状態はなくならないので、デッドロックは防げません。
  • ウ獲得の順序を逆にすると、まさにデッドロックが起きる形になります。
  • エ優先度をそろえても、資源を取りに行く順が逆なら待ち合いは起きます。

仕組み

デッドロックは、資源を独り占めする、持ったまま次を待つ、横取りできない、待ちが輪になる、の 4 つがそろうと起きます。資源を取る順を全体で決めておくのは、この最後の「輪」をできなくする方法です。

データベースの行のロックでも同じことが起きます。複数の行を更新するときは、どの処理も主キーの小さい順に更新する、のように順番をそろえると防げます。

この問に出る言葉