Interactive

デッドロック検出可視化

トランザクションがロックを要求すると、資源が空いていれば即座に取得し、埋まっていれば「待機-forグラフ」に辺が引かれます。 4つのトランザクション(T1〜T4)と4つの資源(A〜D)で実際に要求・コミットを繰り返し、待機-forグラフに閉路ができた瞬間、デッドロックが確定する様子を確かめてください。 閉路が見つかったら、その上のどのトランザクションを犠牲者として強制アボートすれば解けるかも実際に試せます。

資源 A

空き

資源 B

空き

資源 C

空き

資源 D

空き

T1T2T3T4

🟢 デッドロックなし(待機-forグラフに閉路無し)

ここが分かる

  • 「待機-forグラフに閉路が存在すること」と「デッドロックが発生していること」は同値(検出定理)。閉路が無ければ、辺をたどればいつか「何も待っていない頂点」に行き着き、そこから連鎖的に全体がほどける——「3者デッドロック」プリセットの各要求を1つずつ手動で試すと、3件目の要求で初めて閉路が閉じる瞬間が見える。
  • 閉路上のどれか1件をアボートするだけで閉路はほどける。犠牲者が保有していた資源が解放され、それを待っていたトランザクションへ即座に付与される様子まで確認できる——これが「検出→犠牲者選定→部分解消」の一連の流れ。
  • 循環しない待ちの連鎖(T1がT2を待ち、T2がT3を待つが、T3は何も待っていない)はどれだけ長くてもデッドロックではない——手動でT1・T2だけを使って試すとその違いが分かる。
  • 銀行家アルゴリズムは要求が来る前に「承認したら安全か」を確かめる予防(回避)、この可視化は起きてしまった膠着を後から見つける検出——同じ問題への正反対のアプローチ。