排他制御(exclusive control)
- テクノロジ系
- データベース
- 基本情報
- 応用情報
- 重要度 ★★★★☆
同じデータを複数の処理が同時に更新しないよう、一方を待たせる制御。
試験ではこう出る
科目A(旧・午前)では「共有ロックと専有ロックの組合せで、待たされるのはどれか」という表形式の問題が定番です。デッドロックとセットで問われることも多く、両方の違いを説明できる状態にしておく必要があります。応用情報の科目Bでは、同時実行数が増えたときの性能問題として登場します。
現場のたとえ
同じ在庫を2人が同時に引き当ててしまわないよう、伝票をロックする作業そのものです。倉庫に部品が10個しかないのに、Aさんが「10個引当」の伝票を書いている最中にBさんも同じ在庫を見て「10個引当」と書いてしまえば、システム上は20個出たことになり、現物は足りません。だから先に伝票を開いた人が処理を終えるまで、後から来た人には「使用中」と表示して待ってもらう。ただし「在庫数を見るだけ」なら何人が同時に見ても矛盾は起きません。読むだけの人は同時に許し、書く人だけを独占させる——これが共有ロックと専有ロックの区別です。
もう少し正確に言うと
排他制御の方式は大きく2つに分かれます。悲観ロックは「衝突するのが普通」という前提で、データを読んだ時点でロックをかけます。楽観ロックは「衝突は滅多に起きない」という前提でロックをかけず、更新する直前に「読んだときからバージョンが変わっていないか」を確認し、変わっていれば処理をやり直します。同時実行が多い場合、悲観ロックは待ちが増えて性能が落ち、楽観ロックはやり直しが増えます。ロックをかける粒度も重要で、表全体をロックすれば安全ですが待ちが増え、行単位にすれば並列度は上がるが管理コストが増えます。
よくある勘違い
| 用語 | 違い |
|---|---|
| デッドロック | 排他制御の結果として起こりうる異常状態。排他制御そのものではない |
| トランザクション | 処理のまとまりの単位。排他制御はその中で使われる仕組み |
| セマフォ | OSレベルで「同時に使える数」を管理する仕組み。DBのロックより抽象度が高い |
過去問での問われ方
トランザクションTとUがそれぞれ共有ロック・専有ロックを要求する表を示し、待ち状態になる組合せを選ばせる形式が頻出です。「読み×読み」だけが共存できる、と覚えておけば表を暗記する必要はありません。
出典:引用時は「年度・期・試験区分・時間区分・問番号」まで明記すること。
関連用語
ミニクイズ
共有ロック(読取りロック)と専有ロック(更新ロック)の関係として正しいものはどれか。
正解は1番目。読むだけなら何人が同時に見ても矛盾しないので共有ロックは共存できます。一方、更新する側は他の誰にも触らせてはいけないため、専有ロックは共有ロックとも他の専有ロックとも共存できません。
最終更新:2026-08-20