c++中如何防止死鎖

1、什麼是死鎖

線程死鎖是指由於兩個或者多個線程互相持有對方所需要的資源,導致這些線程處於等待狀態,無法前往執行。當線程進入對象的synchronized代碼塊時,便佔有了資源,直到它退出該代碼塊或者調用wait方法,才釋放資源,在此期間,其他線程將不能進入該代碼塊。當線程互相持有對方所需要的資源時,會互相等待對方釋放資源,如果線程都不主動釋放所佔有的資源,將產生死鎖。

2、常見的死鎖場景
  • 一個線程已經拿到了鎖,未釋放鎖,但是又嘗試拿同樣的鎖,這是就會死鎖
  • 兩個以上線程A B …,兩個以上鎖a b…,線程A已經拿到a鎖,線程B已經拿到b鎖,但是線程A在沒有釋放a鎖嘗試獲取b鎖,線程B沒有釋放b鎖嘗試獲取a鎖,這時也會發生死鎖
3、預防死鎖的辦法
  • 加鎖的時候使用try_lock(),如果獲取不到鎖,那麼就釋放自己手裏面得所有鎖,
  • 可以在加鎖的過程中對metux進行地址的比較永遠從最小地址開始加鎖,這樣的話就能保證所有的線程都按同一個順序加鎖,這樣的話也能避免死鎖
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章