【みゅーてっくす】
ミューテックス とは?
最終更新:
💡 共有データを使う間だけ、鍵を持つ
共有データを扱う区間に、同時に複数のスレッドが入らないようにする排他ロック。競合する処理が同じロックを正しく使うことが重要。ロックの取得・解放や順序を誤ると、更新の競合やデッドロックが残る。
📌 このページのポイント
- 相互排除(Mutual Exclusion)のためのロック
- 競合する読み書きを同じロックで保護する
- 取得できるまで待つ操作と、待たずに試す操作を区別
- 解放方法、ロック順序、保護する範囲を設計する
ミューテックスって、何をするもの?
1人だけが鍵を持てる作業室を思い浮かべよう。共有データを使う区間へ入る前にロックを取得し、使い終えたら解放する。別のスレッドはその鍵を取得してから入る。データを自動で直す道具ではなく、同時に入らないための仕組みだよ。
どんな更新が、ぶつかるの?
残高を読み、100円足し、書き戻す処理を2つ同時に行う例だよ。両方が同じ古い残高を読めば、一方の加算が上書きされる場合がある。読み取りから書き戻しまでの一連の処理を、同じロックで保護して順に行うんだ。
片方にだけロックを付ければいい?
競合する側も同じロックを使う必要があるよ。ロックを無視してデータへ触る処理があれば、守る範囲をすり抜けてしまう。何を共有し、どの読み書きが競合するかを整理することが大切。ミューテックスを置いたというだけで、すべてが安全になるわけではないんだ。
鍵を取れないと、ずっと待つの?
使うときの注意は?
保護する区間を必要な範囲にし、待ち続けない構成を考えよう。たとえば自分が持っている鍵をさらに取ろうとしたり、複数のロックを逆の順で取ったりすると、進まなくなる場合がある。解放の漏れやエラー時の扱いも含めて設計しよう。
まとめ:ざっくりこれだけ覚えればOK!
「ミューテックス」って出てきたら「共有データを使う区間に、1つずつ入るための鍵」と思えばだいたいOK!
📖 おまけ:英語の意味
「Mutex / Mutual Exclusion」 = 相互排除
💬 Mutual Exclusionを縮めた呼び名だよ。複数の処理が同じ共有部分へ同時に入るのを防ぐんだ。