---
title: "共有ロックと専有ロックとは？ロックの両立性の見分け方【基本情報技術者試験】"
description: "共有ロックと専有ロックの違いを、読み取り・更新との対応、ロックの両立性、ロック待ち、デッドロックとの関係から整理し、基本情報技術者試験で選択肢を切る判断軸を解説します。"
last_modified_at: "2026-07-27"
canonical_url: "https://stemtazoo.github.io/fe/shared-exclusive-lock/"
section: "fe"
---

## まず結論

**共有ロック**は主に読み取り用、**専有ロック**は主に更新用のロックです。

基本情報技術者試験では、次のように切り分けます。

```text
共有ロック同士
→ 共存できる

共有ロックと専有ロック
→ 共存できない

専有ロック同士
→ 共存できない
```

つまり、

> **共有ロック同士だけは両立し、専有ロックが関わる組合せは両立しない**

と覚えると判断しやすくなります。

---

## 直感的な説明

同じ資料を複数人で読む場面を考えます。

```text
読む人A
読む人B
```

読むだけなら、同じ資料を同時に見ても問題ありません。

これが共有ロック同士の状態です。

一方、誰かが資料を書き換えている途中に別の人が読んだり、同時に別の内容へ書き換えたりすると、内容が食い違う可能性があります。

```text
読む × 読む
→ 同時にできる

読む × 書く
→ 同時にできない

書く × 読む
→ 同時にできない

書く × 書く
→ 同時にできない
```

共有ロックを「読む」、専有ロックを「書く」と置き換えるとイメージしやすいです。

---

## 定義・仕組み

### 共有ロック

共有ロックは、主にデータを読み取るときに使うロックです。

複数のトランザクションが同じデータを読むだけなら、同時に利用できます。

```text
T1：共有ロックを取得
T2：共有ロックを取得
→ 可能
```

ただし、共有ロック中のデータを別のトランザクションが更新することはできません。

### 専有ロック

専有ロックは、主にデータを更新するときに使うロックです。

対象データを更新している間は、ほかのトランザクションによる読み取りや更新を防ぎます。

```text
T1：専有ロックを取得
T2：共有ロックを取得
→ 不可

T2：専有ロックを取得
→ 不可
```

### ロックの両立性

| すでに掛かっているロック | 新たに共有ロック | 新たに専有ロック |
|---|---:|---:|
| 共有ロック | ○ | × |
| 専有ロック | × | × |

試験では、この表をそのまま覚えるよりも、次の1行を残すと便利です。

```text
共有＋共有だけ○
それ以外は×
```

### ロック待ち

必要なロックを取得できない場合、トランザクションは既存のロックが解除されるまで待ちます。

```text
T1が専有ロック中
↓
T2はロックを取得できない
↓
T1の終了まで待つ
```

この状態をロック待ちと呼びます。

このテーマは基本情報技術者試験のデータベース分野に含まれます。公式の出題範囲は、[IPA：基本情報技術者試験](https://www.ipa.go.jp/shiken/kubun/fe.html)から確認できます。

---

## 科目Aでどう出る？

科目Aでは、共有ロックと専有ロックの両立性を問う選択問題がよく出ます。

### 選択肢を切る判断表

| 選択肢の表現 | 判断 |
|---|---|
| 共有ロック中に、別の共有ロックを取得できる | 正しい |
| 共有ロック中に、専有ロックを取得できる | 誤り |
| 専有ロック中に、共有ロックを取得できる | 誤り |
| 専有ロック中に、別の専有ロックを取得できる | 誤り |

試験中は、次の順番で判断します。

```text
1. 既に掛かっているロックを確認
2. 新たに取得したいロックを確認
3. 共有＋共有かどうかを見る
4. 共有＋共有なら可、それ以外は不可
```

### 読み取りと更新に置き換える

用語だけで迷ったら、次のように置き換えます。

```text
共有ロック
→ 読み取り

専有ロック
→ 更新
```

すると、

```text
読む × 読む
→ 可

書くが含まれる
→ 不可
```

と判断できます。

---

## どんな場面で使う？

### 同時実行時のデータ保護

複数の利用者が同じデータを同時に扱うシステムでは、ロックが必要です。

例えば、在庫数が10個の商品を2人が同時に購入するとします。

```text
T1：2個購入
T2：3個購入
```

適切なロックがなければ、片方の更新が上書きされ、在庫数が正しく反映されないことがあります。

更新時に専有ロックを使うことで、同時更新による矛盾を防ぎます。

### 検索と更新の制御

検索だけを行う処理では共有ロック、データを書き換える処理では専有ロックを使います。

```text
SELECT中心の処理
→ 共有ロック

UPDATE・DELETEなどの更新処理
→ 専有ロック
```

ただし、実際のDBMSでは分離レベルや実装方式によって挙動が異なるため、試験では問題文の前提を優先します。

---

## よくある誤解・混同

### 共有ロックなら更新もできる

できません。

共有ロックは読み取り用であり、更新には専有ロックが必要です。

### 専有ロック中でも、読み取りだけならよい

基本的にはできません。

専有ロック中は、そのトランザクションが対象資源を独占しています。

### 共有ロックは1つしか取得できない

違います。

複数のトランザクションが同じ資源に共有ロックを取得できます。

### ロック待ちとデッドロックは同じ

違います。

```text
ロック待ち
→ ほかのトランザクションの終了を待つ

デッドロック
→ 複数のトランザクションが互いのロック解除を待ち続ける
```

例えば、T1が資源A、T2が資源Bをロックしたまま、互いに相手の資源を待つとデッドロックになります。

### 二相ロックは共有ロックと専有ロックの2種類を使うこと

違います。

二相ロックは、

```text
ロックを獲得する段階
↓
ロックを解放する段階
```

の2段階に分ける方式です。

共有ロックと専有ロックの2種類を指す言葉ではありません。

---

## まとめ（試験直前用）

- 共有ロックは主に読み取り、専有ロックは主に更新に使う
- 共有ロック同士だけは同時に取得できる
- 専有ロックが関わる組合せは両立しない
- 迷ったら「読む×読むだけ可」と考える
- ロック待ちとデッドロックを混同しない
