SPONSORED

ミューテックスロック(みゅーてっくすろっく)

最終更新:2026/4/27

ミューテックスロックは、共有リソースへのアクセスを排他的に制御するための同期機構である。

別名・同義語 排他ロック相互排除ロック

ポイント

複数のスレッドが同時に同じリソースにアクセスするのを防ぎ、データの整合性を保つために用いられる。デッドロックに注意が必要。

ミューテックスロックとは

ミューテックスロック(Mutex lock)は、マルチスレッドプログラミングにおいて、共有リソースへのアクセスを制御するための重要な同期構です。Mutexは「Mutual Exclusion(相互排除)」の略であり、一度ロックされると、他のスレッドがそのロックを獲得するまでリソースへのアクセスを阻止します。

動作原理

ミューテックスロックは、通常、ロック状態(locked)とアンロック状態(unlocked)のいずれかの状態を持ちます。スレッドが共有リソースにアクセスする前に、ミューテックスロックを獲得(ロック)します。ロックに成功すると、そのスレッドだけがリソースにアクセスできます。他のスレッドがロックを獲得しようとすると、ロックが解放されるまで待機します。リソースへのアクセスが完了したら、スレッドはミューテックスロックを解放(アンロック)します。

用途

ミューテックスロックは、以下のような場面で利用されます。

  • 共有データの保護: 複数のスレッドが同時に同じデータにアクセスし、競合状態が発生するのを防ぎます。
  • クリティカルセクションの保護: 複数のスレッドが同時に実行してはならないコード領域(クリティカルセクション)を保護します。
  • リソースの排他的利用: ファイルやネットワーク接続などのリソースを、一度に一つのスレッドだけが利用できるようにします。

デッドロック

ミューテックスロックを使用する際には、デッドロックに注意する必要があります。デッドロックは、複数のスレッドが互いに相手が解放するリソースを待ち続け、誰も進めなくなる状態です。デッドロックを回避するためには、ロックの獲得順序を統一したり、タイムアウトを設定したりするなどの対が必要です。

ミューテックスとセマフォ

ミューテックスロックとセマフォは、どちらも同期機構ですが、いくつかの違いがあります。ミューテックスロックは、所有権を持ち、ロックを獲得したスレッドだけが解放できます。一方、セマフォは、所有権を持たず、任意のスレッドがカウントを増減できます。セマフォは、リソースの利用可能数を制御するために使用されることが多いです。

SPONSORED