排他制御とデッドロックの試験問題への適用

同期問題では処理順を時系列で追い、どの資源を保持し、何を待っているかを書き出す。ロックの範囲と取得順を図にすると原因を切り分けやすい。

この単元で学ぶこと

  • 待ちグラフの意味と役割を説明できる
  • ロック順序統一の意味と役割を説明できる
  • タイムアウトの意味と役割を説明できる
  • 待ち関係からデッドロックを判定し、対策を選べる

本文解説

ロック競合では待てば進行できる場合があるが、デッドロックでは待ち関係が循環して全員が進めない。タイムアウト、ロック順序統一、一括取得などで回避・検出を考える。

待ちグラフ 処理間の待ち関係を矢印で表す考え方。 循環がデッドロック検出の手掛かりになる。

ロック順序統一 複数ロックを全処理で同じ順に取得する。 循環待ちの成立を崩しやすい。

タイムアウト 一定時間取得できないロックを諦めて再試行などへ切り替える。 永続待ちを避ける手段だが再試行設計が必要。

ロック粒度 表・ページ・行などどの範囲を一つのロック対象にするか。 細かいほど並行性を上げやすいが管理数が増える。

ロック解放 処理完了や異常終了時に保持ロックを解放する。 解放漏れは不要な待ちを生む。

各処理について保持と要求を2列で書く。循環があればデッドロック候補。性能問題ならロック粒度と保持時間も確認する。

P1保持A/要求B、P2保持B/要求Aなら循環。両者がA→Bの順に統一すればこの組合せは発生しにくい。

図解

待ちグラフで見るデッドロック
保持と要求を書き、循環の有無からデッドロックを判断する。

重要ポイント

  • 待ちグラフ: 処理間の待ち関係を矢印で表す考え方。
  • ロック順序統一: 複数ロックを全処理で同じ順に取得する。
  • タイムアウト: 一定時間取得できないロックを諦めて再試行などへ切り替える。
  • ロック粒度: 表・ページ・行などどの範囲を一つのロック対象にするか。
  • 待ちがあるだけではデッドロックではなく、循環して進行不能かを見る。

間違えやすい点

  • タイムアウトだけを完全な予防策と断定しない。
  • ロック粒度を細かくすれば管理コストが0になると考えない。
  • 異常経路での解放を忘れない。

用語解説

待ちグラフ
処理間の待ち関係を矢印で表す考え方。
ロック順序統一
複数ロックを全処理で同じ順に取得する。
タイムアウト
一定時間取得できないロックを諦めて再試行などへ切り替える。
ロック粒度
表・ページ・行などどの範囲を一つのロック対象にするか。
ロック解放
処理完了や異常終了時に保持ロックを解放する。

関連教材

参考資料

教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。

確認問題の出題・採点や学習履歴の保存にはログインが必要です。