デッドロック(deadlock)
- テクノロジ系
- データベース
- 基本情報
- 応用情報
- 重要度 ★★★★☆
複数の処理が互いの資源解放を待ち続け、永久に処理が進まなくなる状態。
試験ではこう出る
科目A(旧・午前)の定番用語です。「デッドロックの説明として適切なものはどれか」という定義問題か、2つのトランザクションが資源をロックする順序を示した表を与えて「デッドロックが発生するのはどれか」を選ばせる形が多く出ます。応用情報の科目B(旧・午後)ではデータベース分野で、発生を防ぐ設計をどうするかまで踏み込んで問われます。
現場のたとえ
2つの生産ラインが、互いに相手の使っている治具を待って両方止まる状態です。ラインAは治具1を確保したまま治具2が空くのを待ち、ラインBは治具2を確保したまま治具1が空くのを待つ。どちらも「自分が今つかんでいるものは離さない」ので、放っておけば永久に動きません。現場ならリーダーが来て「Bは治具2を一旦戻せ」と片方を諦めさせますが、それがデータベースでいうロールバックです。防ぐ側の工夫も同じで、「治具は必ず番号の小さい順に取る」と決めておけば、この待ち合いは起きません。
もう少し正確に言うと
デッドロックが成立するには4つの条件が同時に満たされる必要があります。相互排除(資源を同時には使えない)、保持と待機(持ったまま別の資源を待つ)、横取り不可(強制的に取り上げられない)、循環待ち(待ち関係が輪になっている)の4つです。逆に言えば、どれか1つを崩せば発生しません。実務でよく使われるのは循環待ちを崩す方法で、資源に順序をつけて必ず同じ順序でロックを取得させます。データベース製品の多くはデッドロックを検出すると、どちらか一方のトランザクションを強制的にロールバックして解消します。この犠牲になる側をデッドロック・ビクティムと呼びます。
よくある勘違い
| 用語 | 違い |
|---|---|
| ライブロック | 状態は変化し続けるが処理が進まない。互いに譲り合って動けない状態 |
| 飢餓状態(スタベーション) | 特定の処理だけが資源を得られない。他の処理は正常に進んでいる |
| 排他制御 | デッドロックの原因ではなく仕組みそのもの。排他制御をした結果としてデッドロックが起こりうる |
過去問での問われ方
複数のトランザクションが資源をロックする順序を表で示し、デッドロックが発生する組合せを選ばせる形式が定番です。ロックの取得順が互いに逆になっている組合せを探せば解けます。
出典:引用時は「年度・期・試験区分・時間区分・問番号」まで明記すること(例:平成31年度 春期 基本情報技術者試験 午前 問◯)。
関連用語
ミニクイズ
デッドロックの説明として適切なものはどれか。
正解は1番目。2番目は飢餓状態、3番目はライブロック、4番目は排他制御そのものの説明です。デッドロックは「互いに待つ」ことがポイントで、待ち関係が輪になっているかどうかで見分けます。
最終更新:2026-08-20