首頁 >後端開發 >C++ >互斥體如何防止多執行緒程式設計中的競爭條件?

互斥體如何防止多執行緒程式設計中的競爭條件?

Linda Hamilton
Linda Hamilton原創
2024-11-11 15:18:02694瀏覽

How do Mutexes Prevent Race Conditions in Multithreaded Programming?

互斥概念:簡化教學

互斥量是互斥鎖的縮寫,可防止多個執行緒同時存取共享資源。要了解它們的工作原理,請考慮一個類比:

電話亭範例

想像一個有門把手的電話亭。人們(線程)排隊使用電話,但只有抓住門把手的人才能使用。一旦他們放手,另一個人就可以輪到他們了。

在這個類比中:

  • 每個人代表一個線程
  • 門把手代表互斥
  • 握住門把代表鎖定互斥鎖
  • 使用手機代表執行受保護的代碼

互斥邏輯

執行緒透過呼叫取得互斥鎖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中文網其他相關文章!

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