互斥概念:簡化教學
互斥量是互斥鎖的縮寫,可防止多個執行緒同時存取共享資源。要了解它們的工作原理,請考慮一個類比:
電話亭範例
想像一個有門把手的電話亭。人們(線程)排隊使用電話,但只有抓住門把手的人才能使用。一旦他們放手,另一個人就可以輪到他們了。
在這個類比中:
互斥邏輯
執行緒透過呼叫取得互斥鎖pthread_mutex_lock(&互斥體)。這將程式碼區域標記為該線程獨佔。
一旦執行緒完成執行該程式碼,它就會透過呼叫 pthread_mutex_unlock(&mutex) 來釋放鎖定。這向其他執行緒發出信號,表明它們現在可以獲得鎖並執行受保護的程式碼。
簡單互斥範例
以下C 11 程式碼說明了互斥概念:
#include <iostream> #include <thread> #include <mutex> std::mutex m; int i = 0; void makeACallFromPhoneBooth() { m.lock(); // Thread acquires lock on mutex (grabs door handle) std::cout << i << " Hello Wife" << std::endl; // Protected code i++; // No other thread can modify i while lock is held m.unlock(); // Thread releases lock (lets go of door handle) } int main() { std::thread man1(makeACallFromPhoneBooth); std::thread man2(makeACallFromPhoneBooth); std::thread man3(makeACallFromPhoneBooth); man1.join(); man2.join(); man3.join(); return 0; }
在此範例中,三個執行緒(人)嘗試使用共享資源(電話)。互斥鎖確保一次只有一個執行緒可以存取資源。
以上是互斥體如何防止多執行緒程式設計中的競爭條件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!