mutexに似た並行制御の仕組み。「今いくつ空いているか」を表すカウンターで同時アクセス数を制御する。
| Mutex | セマフォ | |
|---|---|---|
| 同時アクセス数 | 1つだけ | N個まで(指定可能) |
| イメージ | トイレの個室(1人用)の鍵 | 駐車場(N台分)の空き管理 |
◆ Mutex(同時に1つだけ)
┌─────┐
│ 🚽 │ ← 個室は1つだけ
└──┬──┘
│
🧑 使用中(🔒)
🧑 待ち…
🧑 待ち…
◆ セマフォ(同時にN個まで) ※ 例: N=3
┌─────┐ ┌─────┐ ┌─────┐
│ 🅿️ │ │ 🅿️ │ │ 🅿️ │ ← 3台分の駐車スペース
└──┬──┘ └──┬──┘ └──┬──┘
│ │ │
🚗 駐車中 🚗 駐車中 🚗 駐車中 (カウンター: 0/3 空き)
🚗 待ち… (満車なので待機)
🚗 待ち…
使用例:コネクションプール、APIのレートリミットなど。
上限が1のセマフォは「バイナリセマフォ」と呼ばれ、mutexとほぼ同じになる。