本文へスキップ

ミューテックスとは?

みゅーてっくす

ミューテックスとは、複数スレッドプロセスが共有リソースへ同時にアクセスするのを防ぐための排他制御の仕組みです。

ミューテックス(Mutex)は「Mutual Exclusion(相互排除)」を略した語で、並列処理において複数スレッドプロセスが同時に同じリソースへアクセスすることで生じるデータ競合(レースコンディション)を防ぐための同期プリミティブです。

ミューテックスは本質的に「鍵」のようなものです。あるスレッドがリソースを使用する前にミューテックスをロック(取得)し、使用が終わったらアンロック(解放)します。他のスレッドがロック済みのミューテックスを取得しようとすると、先のスレッドが解放するまでブロック(待機)します。この仕組みにより、特定のコードセクション(クリティカルセクション)へのアクセスを常に1スレッドのみに限定できます。

ミューテックスを使う際には、次の点に注意が必要です。

  • デッドロック: 複数のミューテックスを異なる順序でロックすると、スレッド同士が永遠に待ち合う状態になる
  • 優先度逆転: 低優先度スレッドがロックを保持している間、高優先度スレッドが待機させられる問題
  • 過剰ロック: 不必要に広い範囲をロックすると並列性が失われ性能が低下する

C言語ではpthread_mutex_t、C++ではstd::mutex、Pythonではthreading.Lockとして標準ライブラリに実装されています。セマフォが複数リソースの管理に使われるのに対し、ミューテックスは原則として1つのリソースへのアクセスをロックしたスレッド自身だけが解放できる点が特徴です。

使い方・例文

銀行口座の残高更新処理では、複数のスレッドが同時に残高を読み書きするとデータが壊れる可能性があるため、残高更新のコード全体をミューテックスで保護して一度に1スレッドだけ実行できるようにします。

この用語をシェア

𝕏 でポスト LINE

最終更新:

関連用語