1.死鎖原因
1)資源競爭?
2)進程推進順序非法(互相占有彼此需要的資源,同時請求對方占有的資源)
所謂死鎖,通常指有兩個線程T1和T2都卡住了,并等待對方完成某些操作。T1不能完成是因為它在等待T2完成。但T2也不能完成,因為它在等待T1完成。于是大家都完不成,就導致了死鎖(DeadLock)
例子:
在某一個串行隊列中,同步的向這個串行隊列添加block。(進程推進順序非法)
火車票 搶票 同時調(diào)用一個代碼塊 (資源競爭)
下圖是進程推進順序非法:

2.死鎖的必要條件
產(chǎn)生死鎖的四個必要條件:
(1) 互斥條件:一個資源每次只能被一個進程使用。
(2) 請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。
(3) 不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。
(4) 循環(huán)等待條件:若干進程之間形成一種頭尾相接的循環(huán)等待資源關(guān)系。
這四個條件是死鎖的必要條件,只要系統(tǒng)發(fā)生死鎖,這些條件必然成立,而只要上述條件之
一不滿足,就不會發(fā)生死鎖。