ミューテックスロック(みゅーてっくすろっく)
最終更新:2026/4/27
ミューテックスロックは、共有リソースへのアクセスを排他的に制御するための同期機構である。
ポイント
複数のスレッドが同時に同じリソースにアクセスするのを防ぎ、データの整合性を保つために用いられる。デッドロックに注意が必要。
ミューテックスロックとは
ミューテックスロック(Mutex lock)は、マルチスレッドプログラミングにおいて、共有リソースへのアクセスを制御するための重要な同期機構です。Mutexは「Mutual Exclusion(相互排除)」の略であり、一度ロックされると、他のスレッドがそのロックを獲得するまでリソースへのアクセスを阻止します。
動作原理
ミューテックスロックは、通常、ロック状態(locked)とアンロック状態(unlocked)のいずれかの状態を持ちます。スレッドが共有リソースにアクセスする前に、ミューテックスロックを獲得(ロック)します。ロックに成功すると、そのスレッドだけがリソースにアクセスできます。他のスレッドがロックを獲得しようとすると、ロックが解放されるまで待機します。リソースへのアクセスが完了したら、スレッドはミューテックスロックを解放(アンロック)します。
用途
ミューテックスロックは、以下のような場面で利用されます。
- 共有データの保護: 複数のスレッドが同時に同じデータにアクセスし、競合状態が発生するのを防ぎます。
- クリティカルセクションの保護: 複数のスレッドが同時に実行してはならないコード領域(クリティカルセクション)を保護します。
- リソースの排他的利用: ファイルやネットワーク接続などのリソースを、一度に一つのスレッドだけが利用できるようにします。
デッドロック
ミューテックスロックを使用する際には、デッドロックに注意する必要があります。デッドロックは、複数のスレッドが互いに相手が解放するリソースを待ち続け、誰も進めなくなる状態です。デッドロックを回避するためには、ロックの獲得順序を統一したり、タイムアウトを設定したりするなどの対策が必要です。
ミューテックスとセマフォ
ミューテックスロックとセマフォは、どちらも同期機構ですが、いくつかの違いがあります。ミューテックスロックは、所有権を持ち、ロックを獲得したスレッドだけが解放できます。一方、セマフォは、所有権を持たず、任意のスレッドがカウントを増減できます。セマフォは、リソースの利用可能数を制御するために使用されることが多いです。