首頁 >後端開發 >C++ >互斥體如何像電話亭門把手一樣運作?

互斥體如何像電話亭門把手一樣運作?

DDD
DDD原創
2024-11-12 04:16:01172瀏覽

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

透過現實世界的類比了解互斥體概念

為了掌握互斥體的功能,讓我們想像一個涉及多個人和一部手機的場景攤位。每個個體代表一個線程,電話亭象徵一種資源,一次只能由一個人存取。

互斥體作為「門把手」的作用:

互斥量充當電話亭的門把手,控制對資源的存取。當一個人抓住把手時,他們就有效地鎖上了門,防止其他人進入。類似地,取得互斥鎖的執行緒獲得對互斥鎖保護的資源的獨佔存取權。

執行緒如何決定鎖定狀態:

執行緒依賴稱為「記憶體防護」的機制來決定互斥體是否被鎖定。記憶體防護可確保鎖定狀態在所有執行緒之間同步,從而防止多個執行緒同時存取受保護的資源。

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 並發。互斥鎖確保一次只有一個執行緒可以存取 i,從而防止資料損壞。

以上是互斥體如何像電話亭門把手一樣運作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn