死鎖: 是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。
產生死鎖的原因:
1、因為系統資源不足。
2、程序執行推進的順序不合適。
3、資源分配不當。
產生死鎖的條件有四個:
1、互斥條件:所謂互斥就是程序在某一時間內獨佔資源。
2、請求與保持條件:乙個程序因請求資源而阻塞時,對已獲得的資源保持不放。
3、不剝奪條件:程序已獲得資源,在末使用完之前,不能強行剝奪。
4、迴圈等待條件:若干程序之間形成一種頭尾相接的迴圈等待資源關係。
死鎖是因為多執行緒訪問共享資源,由於訪問的順序不當所造成的。以多執行緒為例,如果執行緒1擁有了臨界區物件a,等待臨界區物件b的擁有權,執行緒2擁有了臨界區物件b,等待臨界區物件a的擁有權,這就造成了死鎖。死鎖示例如下:
#include #include dword winapi fun1proc(lpvoid lpparameter);
dword winapi fun2proc(lpvoid lpparameter);
int index = 0;
int tickets = 100;
critical_section g_csa;
critical_section g_csb;
int main()
//執行緒1的入口函式
dword winapi fun1proc(lpvoid lpparameter)
else
}return 0;
}//執行緒2的入口函式
預防死鎖的方法
根據產生死鎖的四個必要條件,只要使其中之一不能成立,死鎖就不會出現。為此,可以採取下列三種預防措施:
1、採用資源靜態分配策略,破壞"部分分配"條件;
2、允許程序剝奪使用其他程序占有的資源,從而破壞"不可剝奪"條件;
3、採用資源有序分配法,破壞"環路"條件。
解除死鎖常常採用下面兩種方法:1、資源剝奪法;2、撤消程序法。
有關死鎖的理解
以下為個人是一些理解和讀書筆記的結合.1.什麼是死鎖 程序的併發控制不僅僅要控制若干程序的同步與互斥,確保程序之間正常通訊,還需要解決程序死鎖問題。一旦出現程序死鎖,相應的程序將無法向前推進。如果系統內的絕大多數程序或全部程序死鎖,那麼整個系統將處於癱瘓狀態,造成系統 宕機 2.引起死鎖的主要原因 ...
有關死鎖那點事兒
有關死鎖那點事兒 死鎖的概念 死鎖 是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。產生死鎖的原因 1 因為系統資源不足。2 程序執行推進的順序不合適。3 資...
死鎖的有關問題
死鎖的定義 所謂死鎖是指各併發程序彼此互相等待對方所擁有的資源,且這些併發程序在得到對方的資源之前不會釋放自己所擁有的資源。從而造成大家都想得到資源而又都得不到資源,各併發程序不能繼續向前推進的狀態。死鎖的起因 死鎖的起因是併發程序的資源競爭。產生死鎖的根本原因在於系統提供的資源個數少於併發程序所要...