死鎖是多個線程在運行過程中互相競爭資源發生的僵局,若無外力作用,它們都無法推進下去。死亡如風,常伴吾身。窩窩頭,嘿嘿!
死鎖的四個必要條件
- 互斥條件:一個資源每次只能被一個進程使用。
- 請求和保持條件:一個進程因為請求資源而阻塞時,對已獲得的資源保持不放。
- 不剝奪條件:進程已經獲得的資源在沒有使用完之前,不能強行剝奪。
- 循環等待條件:若干進程之間形成一種頭尾相接的循環等待資源關系。
解決死鎖的基本方法
預防死鎖:
1)資源一次性分配:一次性分配所有資源,這樣就不會有請求了(破壞請求條件)
2)只要有一個資源得不到分配,就不給這也進程分配其他的資源(破壞保持條件)
3)可剝奪資源:即當某進程獲得了部分資源,但得不到其它資源,則釋放已占有的資源(破壞不剝奪條件)
4)資源有序分配法:系統給每個資源賦予一個編號,每一個進程按照編程遞增的順序請求資源,釋放則相反(破壞環路等待條件)
解除死鎖:
常用的有:
1)剝奪資源:從其他進程剝奪足夠數量的資源給死鎖進程,以解除死鎖狀態;
2)撤銷進程:可以直接撤銷死鎖進程或撤銷代價最小的進程,直至有足夠的資源可用;
預防死鎖
