透過現實世界的類比了解互斥體概念
為了掌握互斥體的功能,讓我們想像一個涉及多個人和一部手機的場景攤位。每個個體代表一個線程,電話亭象徵一種資源,一次只能由一個人存取。
互斥體作為「門把手」的作用:
互斥量充當電話亭的門把手,控制對資源的存取。當一個人抓住把手時,他們就有效地鎖上了門,防止其他人進入。類似地,取得互斥鎖的執行緒獲得對互斥鎖保護的資源的獨佔存取權。
執行緒如何決定鎖定狀態:
執行緒依賴稱為「記憶體防護」的機制來決定互斥體是否被鎖定。記憶體防護可確保鎖定狀態在所有執行緒之間同步,從而防止多個執行緒同時存取受保護的資源。
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中文網其他相關文章!