基本情報暗記無料で始める

デッドロックとは?でっどろっく

デッドロックとは、二つ以上の処理がそれぞれ資源を確保したまま、互いに相手の確保している資源の解放を待ち、どちらも永久に先へ進めなくなる状態。相互排除・保持と待ち・横取り不可・循環待ちの4条件がすべてそろったときにだけ起こるので、どれか一つを崩せば発生しない。基本情報技術者試験では、二つのトランザクションがロックを獲得していく順序を並べて示し、待ちの輪が閉じるかどうかを追わせる形で問われる。

最終更新:2026-10-09

試験情報

基本情報技術者試験の過去問では1回出題されています。

基本情報技術者試験の頻出用語/テクノロジ系

別名:デッドロック(OSレベル)、OSレベル

この語が出る過去問を解く →

背景

ロックはデータの矛盾を防ぐために資源を一つの処理へ独占させる仕組み。ロックを持ったまま次のロックを待つことがある方式では、二つの処理が互いに相手の持つ資源を待つ輪ができうる。並行実行の結果を直列実行と同じにするための2相ロッキング(ロックを獲得する段階と解放する段階を分ける決まり)に従っても、この輪は防げない。そのため、獲得の順序をそろえて防ぐか、検出して片方を取り消すかで対処する。

具体例

トランザクションAがW→X→Y→Zの順にロックを獲得するとき、BもW→X→Y→Zと同じ順序で獲得すれば、Bは先にAが持つ資源の解放を待つだけで、AがBの持つ資源を待つことは起きず、待ちの輪は閉じない。逆にBがX→Wのように一部でも逆順に獲得すると、AはWを持ったままXを待ち、BはXを持ったままWを待つ形になって双方が止まる(令和元年度 秋期 基本情報技術者試験 午前 問29は、この獲得順序の組合せを見比べさせる問題)。PostgreSQLはこの状態を検出すると、片方に SQLSTATE 40P01(deadlock detected)を返して取り消す。

試験での引っ掛け

同じデータを扱う二つの処理なら必ず起きる、と考えるのが誤り。起きるのは獲得順序が逆転している組合せだけで、順序をそろえれば同じデータを扱っても発生しない。共有ロック(read)どうしは同時に保持できるため、輪が閉じるかを数えるときは専有ロック(update)の対象を見る。また「2相ロッキングに従えばデッドロックは起きない」も誤り。2相ロッキングが保証するのは競合直列可能性(並行して実行しても、1つずつ順に実行した結果と同じになること)であって、デッドロックの回避ではない。

関連用語

出た過去問

解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。

この語が出る過去問を解く →

試験での特徴
  • 試験では1回出題
  • 分野:テクノロジ系
  • 同じデータを扱う二つの処理なら必ず起きる、と考えるのが誤り。