同期とは(全体像)
同期は、複数のスレッドが同じデータに同時に書き込んで、内容を壊さないように順番を整えるしくみのこと。スレッドはメモリを共有するので、同時に同じ場所を書き換えると結果がおかしくなる(競合)。これを防ぐのが同期だ。
身近にたとえると、トイレの使い方だ。ミューテックスは「個室の鍵」で、1人が入っている間はほかの人は入れない。セマフォは「空き個室数の表示」で、3室あれば最大3人まで同時に入れる、というイメージ。
押さえるのは、ミューテックスは「1人だけ」、セマフォは「決めた人数まで」という違いだ。
詳しく:ミューテックスとセマフォの違いだけ覚えれば戦える
ここが記事の心臓部。2つの同期のしくみを比べましょう。
ミューテックスとセマフォ
| しくみ | 使える人数 | たとえ | 操作 |
|---|---|---|---|
| ミューテックス | 1人だけ | 個室の鍵 | lock(取る)/unlock(返す) |
| セマフォ | 決めた人数まで | 空き個室数の表示 | P(取る)/V(戻す) |
ミューテックス(相互排他)は、1度に1人だけが使える鍵です。`lock`で鍵を取り、使い終わったら`unlock`で返します。誰かが使っている間は、ほかのスレッドは返されるまで待ちます。共有データを守る、いちばん基本のしくみです。
セマフォは、空き枠の数を数えるしくみです。枠の数を決めておき、`P操作`で1つ取り(空きがなければ待つ)、`V操作`で1つ戻します。枠を3にすれば、最大3人まで同時に使えます。なお、セマフォはダイクストラが考えたしくみとして知られます。
ここで取り違えやすいのがミューテックスとセマフォの関係です。「同じもの」と思いがちですが、ミューテックスは1人だけ、セマフォは複数まで。ただし、枠を1つにしたセマフォ(バイナリセマフォ)は、ミューテックスと同じ働きになります。
もう1つ、P操作は「単に1減らす」だけではない点に注意。P操作は「空きがあるか確認 → あれば1減らす/なければ待つ」をまとめて行うのがポイントです。
わかりやすく言い換えると
要するに、トイレのたとえで覚えるとラクです。
①ミューテックス … 個室の鍵(1人だけ・lock/unlock)
②セマフォ … 空き個室数の表示(決めた人数まで・P/V操作)
③P操作とV操作 … Pは「空きを確認して1取る(なければ待つ)」、Vは「1戻す」
つまり、「ミューテックスは1人・セマフォは複数」「枠1つのセマフォはミューテックスと同じ」、この2点が試験の急所です。
試験のツボ
🔴 一番出る:ミューテックスとセマフォの違い
①ミューテックス = 1人だけ使える鍵(lock/unlock)
②セマフォ = 決めた人数まで使える(P/V操作)
🔴 次に出る:P操作とV操作
①P操作 = 空きを確認して1取る(なければ待つ)
②V操作 = 使い終わって1戻す(待っている人を起こす)
🟡 押さえると安定:バイナリセマフォ
①枠を1つにしたセマフォ(バイナリセマフォ)はミューテックスと同じ働き
②セマフォはダイクストラが考えたしくみ
よくある間違い
①「ミューテックスとセマフォはまったく同じもの」→ ✗ ミューテックスは1人だけ、セマフォは複数まで。枠を1つにしたセマフォだけが同じ働き。
②「P操作はカウンタを1減らすだけ」→ ✗ P操作は「空きを確認して、あれば1減らす・なければ待つ」をまとめて行う。
③「セマフォは1人しか使えない」→ ✗ セマフォは枠の数だけ同時に使える。1人だけなのはミューテックス(や枠1のセマフォ)。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(ミューテックスとセマフォ)
ミューテックスとセマフォに関する次の記述のうち、正しいものはどれか。
- ミューテックスは1人だけ使える鍵で、セマフォは決めた人数まで使えるしくみとされている
- ミューテックスは決めた人数まで使え、セマフォは1人だけ使えるしくみとされているものだ
- ミューテックスもセマフォもまったく同じで、使える人数に違いはないものとされているのだ
- ミューテックスもセマフォも紙に印刷する装置のことで、同期とは無関係なものとされている
解答は 1 ですよ。
ミューテックスは1人だけ使える鍵、セマフォは決めた人数まで使えるしくみですね。枠を1つにしたセマフォだけがミューテックスと同じ働きになります。
選択肢2のミューテックスとセマフォが逆、選択肢3の「同じ」、選択肢4の「印刷する装置」はどれも誤りですよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | ミューテックスは1人・セマフォは複数 |
| 2 | ✗ | 説明が逆 |
| 3 | ✗ | 使える人数が違う |
| 4 | ✗ | 印刷する装置ではない |
オリジナル問題2(P操作とV操作)
セマフォのP操作とV操作に関する次の記述のうち、正しいものはどれか。
- P操作もV操作もまったく同じ働きで、取るか戻すかの違いはないものとされているものだ
- P操作は空きを確認して1取り、なければ待つ操作で、V操作は使い終わって1戻す操作だ
- P操作は1戻す操作で、V操作は空きを確認して1取る操作とされ、役割が逆になっている
- P操作もV操作も紙に印刷する手順のことで、セマフォとは無関係なものとされているのだ
解答は 2 ですよ。
P操作は空きを確認して1取り、なければ待つ操作で、V操作は使い終わって1戻す操作ですね。Pは単なる減算ではなく、確認と待機を含みます。
選択肢1の「同じ働き」、選択肢3のPとVが逆、選択肢4の「印刷する手順」はどれも誤りですよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 取るのと戻すので役割が違う |
| 2 | ✓ | Pは取る(待つ)・Vは戻す |
| 3 | ✗ | P操作とV操作が逆 |
| 4 | ✗ | 印刷する手順ではない |
オリジナル問題3(同期の役割)
同期のしくみに関する次の記述のうち、正しいものはどれか。
- 同期は紙に印刷する装置のことで、共有データの保護とは無関係なものとされているものだ
- 同期はハードウェアの電源装置の一種で、スレッドの制御には使えないものとされているのだ
- 同期は複数のスレッドが同じデータを同時に壊さないよう、順番を整えるためのしくみである
- 同期はスレッドの数を必ず1つに減らす装置で、共有という考え方をなくすものとされている
解答は 3 ですよ。
同期は複数のスレッドが同じデータを同時に壊さないよう、順番を整えるためのしくみですね。ミューテックスやセマフォがその代表です。
選択肢1の「印刷する装置」、選択肢2の「電源装置」、選択肢4の「スレッドを1つに減らす」はどれも誤りですよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 印刷する装置ではない |
| 2 | ✗ | 電源装置ではない |
| 3 | ✓ | 共有データを守り順番を整えるしくみ |
| 4 | ✗ | スレッドを減らすものではない |
まとめ
押さえどころ
- 🔴 ミューテックスとセマフォ = ミューテックスは1人だけ使える鍵、セマフォは決めた人数まで使える。
- 🔴 P操作とV操作 = Pは空きを確認して1取る(なければ待つ)、Vは1戻す。Pは単なる減算ではない。
- 🟡 バイナリセマフォ = 枠を1つにしたセマフォはミューテックスと同じ働き。セマフォはダイクストラが考えた。
次に学ぶ
執筆: SikakuQuest編集部