Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah mutex berfungsi seperti pemegang pintu pondok telefon?

Bagaimanakah mutex berfungsi seperti pemegang pintu pondok telefon?

DDD
DDDasal
2024-11-12 04:16:01172semak imbas

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

Memahami Konsep Mutex melalui Analogi Dunia Sebenar

Untuk memahami fungsi mutex, mari kita bayangkan senario yang melibatkan berbilang individu dan telefon gerai. Setiap individu mewakili benang, dan pondok telefon melambangkan sumber yang hanya boleh diakses oleh seorang pada satu masa.

Peranan Mutex sebagai "Pemegang Pintu":

Mutex bertindak sebagai pemegang pintu pondok telefon, mengawal akses kepada sumber. Apabila seseorang memegang pemegangnya, mereka mengunci pintu dengan berkesan, menghalang orang lain daripada masuk. Begitu juga, benang yang memperoleh kunci pada mutex memperoleh akses eksklusif kepada sumber yang dilindungi oleh mutex.

Cara Benang Menentukan Status Kunci:

Benang bergantung pada mekanisme yang dipanggil "pagar ingatan" untuk menentukan sama ada mutex dikunci. Pagar memori memastikan bahawa status kunci disegerakkan merentas semua utas, menghalang berbilang utas daripada mengakses sumber yang dilindungi secara serentak.

Unterscheidung zwischen Mutex und kritischem Abschnitt:

Dalam Windows cuma, objek bahagian kritikal menawarkan alternatif kepada mutex. Objek bahagian kritikal lebih pantas dan hanya boleh dilihat oleh urutan pelaksananya. Walau bagaimanapun, secara umum, istilah "bahagian kritikal" merujuk kepada kawasan kod yang dilindungi oleh mutex.

Ein einfaches Mutex-Beispielprogramm:

Berikut ialah program yang dipermudahkan yang menunjukkan pelaksanaan mutex asas:

#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;
}

Dalam program ini, beberapa utas cuba untuk akses pembolehubah kongsi i secara serentak. Mutex memastikan bahawa hanya satu utas boleh mengakses i pada satu masa, menghalang rasuah data.

Atas ialah kandungan terperinci Bagaimanakah mutex berfungsi seperti pemegang pintu pondok telefon?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn