死鎖形成的幾個(gè)必要條件
1疼蛾、互斥
2肛跌、等待
3、不可搶占
4察郁、循環(huán)等待
避免死鎖的方法就是衍慎,打破任一個(gè)必要條件。循環(huán)等待最容易打破皮钠。
科學(xué)家進(jìn)餐問(wèn)題稳捆。(都是在獲取左邊的鎖,)
abcde5個(gè)科學(xué)家順時(shí)針坐在圓桌上(按先獲取左邊的鎖麦轰,再去獲取右邊的)
假如 a要獲取b的鎖(right鎖)乔夯,(如果a現(xiàn)在無(wú)法獲取b的鎖,證明b現(xiàn)在有左邊的鎖款侵,而且右邊的鎖沒(méi)有被占用末荐,b同時(shí)占用了2個(gè)鎖之后執(zhí)行結(jié)束釋放左右的鎖)a在b釋放鎖之后獲取b的鎖(也就是right鎖)
簡(jiǎn)單的鎖順序死鎖
一個(gè)操作是先獲取左邊的鎖然后獲取右邊的鎖,另一個(gè)操作先獲取右邊的鎖然后獲取左邊的鎖新锈。
當(dāng)一個(gè)線(xiàn)程獲取了左邊的鎖之后準(zhǔn)備去獲取右邊的鎖鞠评,但是另一個(gè)線(xiàn)程獲取了右邊的鎖,正準(zhǔn)備獲取左邊的鎖壕鹉。這樣鎖都不會(huì)被釋放形成死鎖。
解決方法:
制定一個(gè)獲取鎖的順序聋涨, 兩個(gè)操作都先獲取left或者先獲取right(操作獲取鎖順序是一致的)晾浴。