ミューテックスの概念: 簡易チュートリアル
ミューテックス (相互排他ロックの略) は、複数のスレッドが共有リソースに同時にアクセスすることを防ぎます。どのように機能するかを理解するために、次のような例えを考えてみましょう。
電話ボックスの例
ドア ハンドルが付いた 1 つの電話ボックスを想像してください。電話を使用するために人々 (スレッド) が列に並んでいますが、ドアハンドルを握った人だけが電話を使用できます。彼らが手を放した瞬間に、別の人が順番を引き継ぐことができます。
このたとえでは:
ミューテックス ロジック
スレッドは、pthread_mutex_lock(&mutex) を呼び出してミューテックスのロックを取得します。これにより、コードの領域がそのスレッド専用としてマークされます。
スレッドがそのコードの実行を終了すると、pthread_mutex_unlock(&mutex) を呼び出してロックを解放します。これにより、ロックを取得して保護されたコードを実行できるようになったことが他のスレッドに通知されます。
簡単なミューテックスの例
次の C 11 コードは、ミューテックスの概念を示しています。
#include <iostream> #include <thread> #include <mutex> std::mutex m; int i = 0; void makeACallFromPhoneBooth() { m.lock(); // Thread acquires lock on mutex (grabs door handle) std::cout << i << " Hello Wife" << std::endl; // Protected code i++; // No other thread can modify i while lock is held m.unlock(); // Thread releases lock (lets go of door handle) } int main() { std::thread man1(makeACallFromPhoneBooth); std::thread man2(makeACallFromPhoneBooth); std::thread man3(makeACallFromPhoneBooth); man1.join(); man2.join(); man3.join(); return 0; }
この例では、3 つのスレッド (人々) が共有リソース (電話) を使用しようとします。ミューテックスにより、一度に 1 つのスレッドだけがリソースにアクセスできるようになります。
以上がミューテックスはマルチスレッド プログラミングにおける競合状態をどのように防ぐのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。