排他制御とデッドロックの試験問題への適用
同期問題では処理順を時系列で追い、どの資源を保持し、何を待っているかを書き出す。ロックの範囲と取得順を図にすると原因を切り分けやすい。
この単元で学ぶこと
- 待ちグラフの意味と役割を説明できる
- ロック順序統一の意味と役割を説明できる
- タイムアウトの意味と役割を説明できる
- 待ち関係からデッドロックを判定し、対策を選べる
本文解説
ロック競合では待てば進行できる場合があるが、デッドロックでは待ち関係が循環して全員が進めない。タイムアウト、ロック順序統一、一括取得などで回避・検出を考える。
待ちグラフ 処理間の待ち関係を矢印で表す考え方。 循環がデッドロック検出の手掛かりになる。
ロック順序統一 複数ロックを全処理で同じ順に取得する。 循環待ちの成立を崩しやすい。
タイムアウト 一定時間取得できないロックを諦めて再試行などへ切り替える。 永続待ちを避ける手段だが再試行設計が必要。
ロック粒度 表・ページ・行などどの範囲を一つのロック対象にするか。 細かいほど並行性を上げやすいが管理数が増える。
ロック解放 処理完了や異常終了時に保持ロックを解放する。 解放漏れは不要な待ちを生む。
各処理について保持と要求を2列で書く。循環があればデッドロック候補。性能問題ならロック粒度と保持時間も確認する。
P1保持A/要求B、P2保持B/要求Aなら循環。両者がA→Bの順に統一すればこの組合せは発生しにくい。
図解
重要ポイント
- 待ちグラフ: 処理間の待ち関係を矢印で表す考え方。
- ロック順序統一: 複数ロックを全処理で同じ順に取得する。
- タイムアウト: 一定時間取得できないロックを諦めて再試行などへ切り替える。
- ロック粒度: 表・ページ・行などどの範囲を一つのロック対象にするか。
- 待ちがあるだけではデッドロックではなく、循環して進行不能かを見る。
間違えやすい点
- タイムアウトだけを完全な予防策と断定しない。
- ロック粒度を細かくすれば管理コストが0になると考えない。
- 異常経路での解放を忘れない。
用語解説
- 待ちグラフ
- 処理間の待ち関係を矢印で表す考え方。
- ロック順序統一
- 複数ロックを全処理で同じ順に取得する。
- タイムアウト
- 一定時間取得できないロックを諦めて再試行などへ切り替える。
- ロック粒度
- 表・ページ・行などどの範囲を一つのロック対象にするか。
- ロック解放
- 処理完了や異常終了時に保持ロックを解放する。
関連教材
参考資料
教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。
確認問題の出題・採点や学習履歴の保存にはログインが必要です。