死鎖的常見問題

1.死鎖的概念:

多個線程在執行態中因爭奪資源造成的一種僵局,若無外力將一直保持這種狀態,這些永遠互相等待的進程稱爲死鎖進程

2.造成死鎖的四個必要條件

1)互斥條件:進程對所分配到的資源進行排他性使用,即在一個時間段內某資源只能被一個進程佔用,若有其他進程訪問,則要等待,直到該資源被佔用的進程釋放掉。

2)請求和保持:進程已經佔用至少一個資源,又要請求新的資源,新的資源被其他進程佔用,此時請求阻塞,但又對自己已佔有的資源保持不放。

3)不剝奪條件:指進程佔有的資源在未使用完之前不能被剝奪,只能在使用完後自己釋放掉。

4)環路等待條件:p0在等待p1的資源,p1在等待P2的資源,p2在等待p0的資源。

3.處理死鎖的四個方式

死鎖的預防、死鎖的避免、死鎖的檢測、死鎖的解除

1)死鎖的預防:破壞生成死鎖的四個條件中的一個。比如進程在申請資源時一次性申請所需要的全部資源,這就破壞了保持和等待條件。將資源分層,得到上一層資源後,才能申請下一層資源,破壞了環路等待條件。

2)死鎖避免:每次申請資源時判斷這些操作是否安全。比如銀行家算法。會增大系統的開銷。

3)死鎖的檢測:判斷系統是否處於死鎖狀態。

4)死鎖的解除:與死鎖檢測一起使用,方式是剝奪資源,將進程所擁有的資源強行收回分配給其他進程。


要避免死鎖,要事先知道系統所擁有的資源數量和屬性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章