多執行緒中的鎖

2022-06-10 08:24:07 字數 557 閱讀 7406

導致死鎖的原因

有兩個或多個執行緒需要在幾個共享物件上獲取鎖,這可能會導致死鎖。

thread1--->object1--->object2

thread2--->object2--->object1 

死鎖的四個條件

1.互斥條件

2.不可剝奪條件

3.請求與保持條件

4.迴圈等待條件

解決方式

1.避免滿足產生死鎖的四個條件,採用正確的資源排序來避免死鎖,該技術是給每乙個需要鎖的物件指定乙個順序,確保每個執行緒按這個順序獲鎖。

例如:假設有兩個物件分別為object1和object2,執行緒2必須獲object1上鎖,然後才能獲取object2上面的鎖,所以執行緒1一旦執行緒1 獲得object1上面的鎖 ,執行緒2就必須等待執行緒1釋放鎖,這樣就能避免執行緒死鎖

thread1--->object1--->object2

thread2--->object1--->object2 

多執行緒中鎖的使用

執行緒之間的鎖有 互斥鎖 條件鎖 自旋鎖 讀寫鎖 遞迴鎖。一般而言,鎖的功能越強大,效能就會越低。1 互斥鎖 互斥鎖用於控制多個執行緒對他們之間共享資源互斥訪問的乙個訊號量。也就是說是為了避免多個執行緒在某一時刻同時操作乙個共享資源。例如執行緒池中的有多個空閒執行緒和乙個任務佇列。任何是乙個執行緒都...

多執行緒中的互斥鎖

互斥量mutex 類物件,理解成一把鎖,多個執行緒嘗試用lock 成員函式來對其加鎖,只有乙個執行緒能夠鎖定成功 lock 與unlock 須成對存在,很容易出問題,所以引入 std lock guard 類模板,對於忘記新增unlock 會自動新增,類似於智慧型指標的功能。鎖住的 量多少成為粒度的...

多執行緒中鎖的使用

本文 主要介紹下c 的兩種鎖 互斥鎖 lock 和讀寫鎖 readwritelock 互斥鎖 lock lock 關鍵字將語句塊標記為臨界區,方法是獲取給定物件的互斥鎖,執行語句,然後釋放該鎖。當任何乙個執行緒獲取到鎖後,其他執行緒如果需要使用該臨界區內 則必須等待前乙個執行緒使用完畢後釋放鎖。示例...