2相ロッキングプロトコルとは?にそうろっきんぐぷろとこる
2相ロッキングプロトコルとは、トランザクションが使うロックを、取得だけを行う成長(拡張)相と、解放だけを行う縮退相の2段階に分ける排他制御の規則。1つでもロックを外したら以後は新たに取らない、という決まりを全員が守ることで、同時に動かしても直列に実行したのと同じ結果を保証する。
最終更新:2026-10-09
この語が出る過去問を解く →背景
複数の処理が同じデータを同時に読み書きすると、片方の更新が消えたり、途中の値を読んでしまう。ロックをかければ防げるが、いつ外してよいかを各処理が勝手に決めると、外した後に別のロックを取る処理が現れて順序が崩れる。取得と解放を時間で分ける約束を守れば、その崩れが原理的に起きない。データベースの同時実行制御の基本として出題される。
具体例
口座間の振込みでは、出金元と入金先の両方のロックを先に取り切ってから金額を書き換え、書き終えてからまとめて解放する。取りながら外す動きを許すと、別の処理が出金後・入金前の残高を読み、合計が合わない状態を見てしまう。MySQLのInnoDBやPostgreSQLもロックによる同時実行制御を備えている。
試験での引っ掛け
名前が似た2相コミットは分散データベースで更新を確定させる手順であり、こちらは同時実行制御の規則。直列化可能性は保証するがデッドロックは防げない点が最大の的。先に来るのが取得だけの成長相、後が解放だけの縮退相で、順序も逆にしない。
関連用語
出た過去問
出典:令和元年度 秋期 基本情報技術者試験 午前 問29(IPA)
2相ロッキングプロトコルに従ってロックを獲得するトランザクションA、Bを図のように同時実行した場合に、デッドロックが発生しないデータ処理順序はどれか。ここで、r…
正解:①update X ②read W ③update Y ④update Z
要点:デッドロック回避の基本は、資源のロック順序を全体でそろえること
2相ロッキングでは獲得したロックをトランザクション終了まで解放しないため、2つのトランザクションが同じ2件のデータを互いに逆の順序でロックしようとするとデッドロックになる。トランザクションAはW、X、Y、Zの順に処理するので、Bも同じ相対順序でロックを取れば循環待ちは起きない。Wは共有ロックなので双方が同時に保持でき、待ちの原因にはならない点も判断材料になる。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。