鎖順序死鎖

死鎖形成的幾個必要條件
1、互斥
2、等待
3、不可搶占
4、循環等待

避免死鎖的方法就是,打破任一個必要條件。循環等待最容易打破。
科學家進餐問題。(都是在獲取左邊的鎖,)

abcde5個科學家順時針坐在圓桌上(按先獲取左邊的鎖,再去獲取右邊的)
假如 a要獲取b的鎖(right鎖),(如果a現在無法獲取b的鎖,證明b現在有左邊的鎖,而且右邊的鎖沒有被占用,b同時占用了2個鎖之后執行結束釋放左右的鎖)a在b釋放鎖之后獲取b的鎖(也就是right鎖)

簡單的鎖順序死鎖
一個操作是先獲取左邊的鎖然后獲取右邊的鎖,另一個操作先獲取右邊的鎖然后獲取左邊的鎖。
當一個線程獲取了左邊的鎖之后準備去獲取右邊的鎖,但是另一個線程獲取了右邊的鎖,正準備獲取左邊的鎖。這樣鎖都不會被釋放形成死鎖。

解決方法:

制定一個獲取鎖的順序, 兩個操作都先獲取left或者先獲取right(操作獲取鎖順序是一致的)。


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容