ホームページ  >  記事  >  バックエンド開発  >  ミューテックスは電話ボックスのドアハンドルのようにどのように機能しますか?

ミューテックスは電話ボックスのドアハンドルのようにどのように機能しますか?

DDD
DDDオリジナル
2024-11-12 04:16:01133ブラウズ

How does a mutex work like a phone booth door handle?

現実世界のアナロジーを通じてミューテックスの概念を理解する

ミューテックスの機能を理解するために、複数の個人と電話が関与するシナリオを視覚化してみましょうブース。各個人はスレッドを表し、電話ボックスは一度に 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。