現実世界のアナロジーを通じてミューテックスの概念を理解する
ミューテックスの機能を理解するために、複数の個人と電話が関与するシナリオを視覚化してみましょうブース。各個人はスレッドを表し、電話ボックスは一度に 1 人だけがアクセスできるリソースを象徴します。
「ドア ハンドル」としてのミューテックスの役割:
ミューテックスは電話ボックスのドア ハンドルとして機能し、リソースへのアクセスを制御します。人がハンドルを握ると、ドアが効果的にロックされ、他人の侵入を防ぎます。同様に、ミューテックスのロックを取得したスレッドは、ミューテックスによって保護されているリソースへの排他的アクセスを取得します。
スレッドによるロック ステータスの決定方法:
スレッドはミューテックスがロックされているかどうかを判断する「メモリフェンシング」と呼ばれるメカニズム。メモリ フェンシングにより、ロック ステータスがすべてのスレッド間で確実に同期され、保護されたリソースに複数のスレッドが同時にアクセスすることがなくなります。
Unterscheidung zwischen Mutex und kritischem Abschnitt:
Windowsただし、クリティカル セクション オブジェクトはミューテックスの代替手段を提供します。クリティカル セクション オブジェクトは高速であり、実装スレッドのみに表示されます。ただし、一般的に、「クリティカル セクション」という用語は、ミューテックスによって保護されているコード領域を指します。
Ein einfaches Mutex-Beispielprogramm:
これは簡略化されたプログラムです。これは、基本的なミューテックスの実装を示しています。
#include <iostream> #include <thread> #include <mutex> using namespace std; mutex m; // Mutex for synchronization int i = 0; // Shared variable void makeCall() { m.lock(); // Acquire mutex lock cout << "Thread ID: " << this_thread::get_id() << endl; cout << "Value of i: " << i << endl; i++; // Increment shared variable m.unlock(); // Release mutex lock } int main() { // Create threads and assign the makeCall function to each thread t1(makeCall); thread t2(makeCall); thread t3(makeCall); // Join threads to wait for completion t1.join(); t2.join(); t3.join(); return 0; }
このプログラムでは、複数のスレッドが共有変数 i に同時にアクセスしようとします。ミューテックスにより、一度に 1 つのスレッドだけが i にアクセスできるようになり、データの破損が防止されます。
以上がミューテックスは電話ボックスのドアハンドルのようにどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。