【みゅーてっくす】

ミューテックス とは?

💡 「今使ってます」の「使用中プレート」
📌 このページのポイント
ミューテックス(Mutex) 共有リソース (メモリ/ファイル) LOCK スレッドA ロック取得済み アクセス可能 スレッドB 待機中... ブロック スレッドC 待機中... ブロック ルール 鍵を持つスレッドだけが リソースにアクセスできる 用途例:データベース接続・ファイル書き込み・共有メモリへのアクセス制御
ロック(鍵)を持つスレッドだけが共有リソースにアクセスできる仕組み
ひよこ ひよこ

ミューテックスって名前が難しいけど何をするもの?

ペンギン先生 ペンギン先生

トイレの「使用中」プレートを想像してみて。誰かが使ってるとき他の人は外で待つよね。ミューテックスはプログラムの中でその「使用中プレート」の役割をするんだよ。

ひよこ ひよこ

どんなときに必要なの?

ペンギン先生 ペンギン先生

複数のスレッドが同じ変数やファイルを同時に書き換えようとすると、データが壊れることがあるんだ。例えば「残高に100円追加する」処理を2つのスレッドが同時にやると、片方の更新が消えて「100円しか増えてない!」ってなるんだよ。

ひよこ ひよこ

ミューテックスを使うと解決するの?

ペンギン先生 ペンギン先生

そうだよ。ミューテックスで「今から残高を変えます」とロックすれば、もう1つのスレッドはロックが解放されるまで待ってくれる。順番に処理されるから安全なんだ。

ひよこ ひよこ

じゃあとりあえずミューテックスを使えば安全なの?

ペンギン先生 ペンギン先生

ここが難しいポイントで、ミューテックスを使いすぎると「全部順番待ち」になってせっかくの並行処理が遅くなるんだ。しかも2つのミューテックスを違う順番でロックするとデッドロックが起きる。「必要な場所だけ、必要最小限の範囲でロックする」という設計が重要で、このバランスがむずかしいんだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
ミューテックスって出てきたら「1つのスレッドだけがリソースを使えるようにする排他ロック」と思えばだいたいOK!
📖 おまけ:英語の意味
「Mutex(Mutual Exclusion)」 = 相互排除
💬 「Mutual(お互いに)+Exclusion(排除)」の略。セマフォという類似概念もある
← 用語集にもどる