同期(ミューテックス・セマフォ)とは?複数のスレッドが共有データに安全にアクセスするためのしくみ

公開: 更新: カテゴリ: テクノロジ系

30秒で結論

同期とは(全体像)

同期は、複数のスレッドが同じデータに同時に書き込んで、内容を壊さないように順番を整えるしくみのこと。スレッドはメモリを共有するので、同時に同じ場所を書き換えると結果がおかしくなる(競合)。これを防ぐのが同期だ。

身近にたとえると、トイレの使い方だ。ミューテックスは「個室の鍵」で、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人だけ使える鍵で、セマフォは決めた人数まで使えるしくみとされている
  2. ミューテックスは決めた人数まで使え、セマフォは1人だけ使えるしくみとされているものだ
  3. ミューテックスもセマフォもまったく同じで、使える人数に違いはないものとされているのだ
  4. ミューテックスもセマフォも紙に印刷する装置のことで、同期とは無関係なものとされている
テクマスター
テクマスター 解答・解説

解答は 1 ですよ。

ミューテックスは1人だけ使える鍵、セマフォは決めた人数まで使えるしくみですね。枠を1つにしたセマフォだけがミューテックスと同じ働きになります。

選択肢2のミューテックスとセマフォが逆、選択肢3の「同じ」、選択肢4の「印刷する装置」はどれも誤りですよ。

選択肢判定理由
1ミューテックスは1人・セマフォは複数
2説明が逆
3使える人数が違う
4印刷する装置ではない

オリジナル問題2(P操作とV操作)

📝 オリジナル問題 2 セマフォのP操作とV操作

セマフォのP操作とV操作に関する次の記述のうち、正しいものはどれか。

  1. P操作もV操作もまったく同じ働きで、取るか戻すかの違いはないものとされているものだ
  2. P操作は空きを確認して1取り、なければ待つ操作で、V操作は使い終わって1戻す操作だ
  3. P操作は1戻す操作で、V操作は空きを確認して1取る操作とされ、役割が逆になっている
  4. P操作もV操作も紙に印刷する手順のことで、セマフォとは無関係なものとされているのだ
テクマスター
テクマスター 解答・解説

解答は 2 ですよ。

P操作は空きを確認して1取り、なければ待つ操作で、V操作は使い終わって1戻す操作ですね。Pは単なる減算ではなく、確認と待機を含みます。

選択肢1の「同じ働き」、選択肢3のPとVが逆、選択肢4の「印刷する手順」はどれも誤りですよ。

選択肢判定理由
1取るのと戻すので役割が違う
2Pは取る(待つ)・Vは戻す
3P操作とV操作が逆
4印刷する手順ではない

オリジナル問題3(同期の役割)

📝 オリジナル問題 3 同期の役割

同期のしくみに関する次の記述のうち、正しいものはどれか。

  1. 同期は紙に印刷する装置のことで、共有データの保護とは無関係なものとされているものだ
  2. 同期はハードウェアの電源装置の一種で、スレッドの制御には使えないものとされているのだ
  3. 同期は複数のスレッドが同じデータを同時に壊さないよう、順番を整えるためのしくみである
  4. 同期はスレッドの数を必ず1つに減らす装置で、共有という考え方をなくすものとされている
テクマスター
テクマスター 解答・解説

解答は 3 ですよ。

同期は複数のスレッドが同じデータを同時に壊さないよう、順番を整えるためのしくみですね。ミューテックスやセマフォがその代表です。

選択肢1の「印刷する装置」、選択肢2の「電源装置」、選択肢4の「スレッドを1つに減らす」はどれも誤りですよ。

選択肢判定理由
1印刷する装置ではない
2電源装置ではない
3共有データを守り順番を整えるしくみ
4スレッドを減らすものではない

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る