進程死鎖原因:
進程有三態:執行狀態,就緒狀態,等待狀態。進程因等待資源的時候而睡眠進入等待狀態,只有資源到來的時候才會喚醒進入就緒狀態,進程死鎖就會發生在這個階段(等待態),如果多個進程同時占有對方需要的資源而同時請求對方的資源,而它們在得到請求之前不會釋放所占有的資源,就會發生進程死鎖,也就是進程不同步。
原因有兩方面:1.系統能夠提供的資源個數比要求該資源的進程少,即系統資源不足 2.進程推進順序非法。
進程死鎖發送條件(4):
1.互斥條件:資源不能被共享,只能由一個進程使用。
2.請求與保持條件:已經得到資源的進程可以再次申請新的資源。
3.非剝奪條件:已經分配的資源不能從相應的進程中被強制地剝奪。
4.循環等待條件:系統中若干進程組成環路,該環路中每個進程都在等待相鄰進程正占用的資源。
解決方案
第一:根據互斥條件和請求和保持條件,我們可以采用資源靜態分配策略,破壞"部分分配"條件;
第二:允許進程剝奪使用其他進程占有的資源,從而破壞"不可剝奪"條件;
第三:采用資源有序分配法,破壞"環路"條件。