有關死鎖的討論

2021-06-22 15:58:04 字數 1191 閱讀 5123

死鎖: 是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。

產生死鎖的原因:

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 資...

死鎖的有關問題

死鎖的定義 所謂死鎖是指各併發程序彼此互相等待對方所擁有的資源,且這些併發程序在得到對方的資源之前不會釋放自己所擁有的資源。從而造成大家都想得到資源而又都得不到資源,各併發程序不能繼續向前推進的狀態。死鎖的起因 死鎖的起因是併發程序的資源競爭。產生死鎖的根本原因在於系統提供的資源個數少於併發程序所要...