1.死鎖原因
1)資源競爭?
2)進程推進順序非法(互相占有彼此需要的資源,同時請求對方占有的資源)
所謂死鎖,通常指有兩個線程T1和T2都卡住了,并等待對方完成某些操作。T1不能完成是因為它在等待T2完成巩梢。但T2也不能完成,因為它在等待T1完成艺玲。于是大家都完不成括蝠,就導(dǎo)致了死鎖(DeadLock)
例子:
在某一個串行隊列中,同步的向這個串行隊列添加block饭聚。(進程推進順序非法)
火車票 搶票 同時調(diào)用一個代碼塊 (資源競爭)
下圖是進程推進順序非法:
2.死鎖的必要條件
產(chǎn)生死鎖的四個必要條件:
(1) 互斥條件:一個資源每次只能被一個進程使用忌警。
(2) 請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放秒梳。
(3) 不剝奪條件:進程已獲得的資源法绵,在末使用完之前,不能強行剝奪酪碘。
(4) 循環(huán)等待條件:若干進程之間形成一種頭尾相接的循環(huán)等待資源關(guān)系朋譬。
這四個條件是死鎖的必要條件,只要系統(tǒng)發(fā)生死鎖兴垦,這些條件必然成立徙赢,而只要上述條件之
一不滿足字柠,就不會發(fā)生死鎖。