產生死鎖必須同時滿足以下四個條件,只要其中任一條件不成立,死鎖就不會發生。
互斥條件:程序要求對所分配的資源(如印表機)進行排他性控制,即在一段時間內某資源僅為乙個程序所占有。此時若有其他程序請求該資源,則請求程序只能等待。不剝奪條件:程序所獲得的資源在未使用完畢之前,不能被其他程序強行奪走,即只能 由獲得該資源的程序自己來釋放(只能是主動釋放)。
請求和保持條件:程序已經保持了至少乙個資源,但又提出了新的資源請求,而該資源已被其他程序占有,此時請求程序被阻塞,但對自己已獲得的資源保持不放。
迴圈等待條件:存在一種程序資源的迴圈等待鏈,鏈中每乙個程序已獲得的資源同時被 鏈中下乙個程序所請求。即存在乙個處於等待狀態的程序集合,其中pi等 待的資源被p(i+1)占有(i=0, 1, …, n-1),pn等待的資源被p0占有
/**
* 乙個簡單的死鎖類
* 當deadlock類的物件flag==1時(td1),先鎖定o1,睡眠500毫秒
* 而td1在睡眠的時候另乙個flag==0的物件(td2)執行緒啟動,先鎖定o2,睡眠500毫秒
* td1睡眠結束後需要鎖定o2才能繼續執行,而此時o2已被td2鎖定;
* td2睡眠結束後需要鎖定o1才能繼續執行,而此時o1已被td1鎖定;
* td1、td2相互等待,都需要得到對方鎖定的資源才能繼續執行,從而死鎖。
*/public
class
deadlock
implements
runnable
catch
(exception e)
synchronized
(o2)}}
if(flag ==0)
catch
(exception e)
synchronized
(o1)}}
}public
static
void
main
(string[
] args)
}
在有些情況下死鎖是可以避免的。三種用於避免死鎖的技術: 多執行緒死鎖的產生以及如何避免死鎖
多執行緒以及多程序改善了系統資源的利用率並提高了系統 的處理能力。然而,併發執行也帶來了新的問題 死鎖。所謂死鎖是指多個執行緒因競爭資源而造成的一種僵局 互相等待 若無外力作用,這些程序都將無法向前推進。1 系統資源的競爭 2 程序推進順序非法 3 死鎖產生的必要條件 加鎖順序 執行緒按照一定的順序...
避免死鎖的產生
死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。第乙個建議往往是最簡單的 乙個執行緒已獲得乙個鎖時,再別去獲取第二個。如果能堅持這個建議,因...
什麼是死鎖?如何避免死鎖? 以及實現執行緒死鎖才程式
所謂死鎖 是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。由於資源占用是互斥的,當某個程序提出申請資源後,使得有關程序在無外力協助下,永遠分配不到必需的資源而...