共有ロックとは?きょうゆうロック
共有ロックとは、データを読むために掛けるロックで、同じ資源に複数のトランザクションが同時に掛けられる。他者の読み取りは妨げないが、書き込みのために掛ける専有ロックとは両立しないため、共有ロックが残っている間は更新側が待たされる。2相ロッキングプロトコルでは、獲得は成長相でまとめて行い、縮退相に入るまで解放しない規律が課される。
最終更新:2026-10-06
情報処理安全確保支援士を最短で暗記・合格する →背景
同時実行を一切許さず1件ずつ処理すれば整合は保てるが、参照ばかりの処理まで直列化すると性能が出ない。かといって読んでいる最中に値が書き換われば、集計の途中で合計が合わなくなる。読み手どうしは互いに害を与えないという事実を使い、読みは相乗り可・書きは排他という2種類にロックを分けたのが共有ロックと専有ロックである。隔離性水準やデッドロックの説明は、いずれもこの区別の上に載っている。
具体例
PostgreSQLでは SELECT ... FOR SHARE が行に共有ロックを掛け、同じ行へ FOR UPDATE を掛けようとした別のトランザクションは解放まで待たされる。MySQLのInnoDBでも SELECT ... FOR SHARE(旧 LOCK IN SHARE MODE)が同じ役割を担い、参照どうしは待ち合わずに通る。
試験での引っ掛け
両立表の向きに注意が要る。両立するのは共有×共有だけで、共有×専有も専有×専有も待ちになる。「読むだけだから安全」も誤りで、同じ行に共有ロックを掛けた2つのトランザクションが揃って専有ロックへ昇格しようとすれば互いに待ち合い、昇格デッドロックが起きる。ロック粒度を行から表へ上げるほど衝突が増える点も併せて狙われる。
関連用語
出典・参考
公式シラバスの3 技術要素 > 4. トランザクション処理 > (1) 同時実行制御(排他制御)に掲載されている用語です。
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。