多執行緒死鎖的產生以及如何避免死鎖

2021-09-28 15:06:41 字數 1097 閱讀 9983

產生死鎖必須同時滿足以下四個條件,只要其中任一條件不成立,死鎖就不會發生。

互斥條件:程序要求對所分配的資源(如印表機)進行排他性控制,即在一段時間內某資源僅為乙個程序所占有。此時若有其他程序請求該資源,則請求程序只能等待。

不剝奪條件:程序所獲得的資源在未使用完畢之前,不能被其他程序強行奪走,即只能 由獲得該資源的程序自己來釋放(只能是主動釋放)。

請求和保持條件:程序已經保持了至少乙個資源,但又提出了新的資源請求,而該資源已被其他程序占有,此時請求程序被阻塞,但對自己已獲得的資源保持不放。

迴圈等待條件:存在一種程序資源的迴圈等待鏈,鏈中每乙個程序已獲得的資源同時被 鏈中下乙個程序所請求。即存在乙個處於等待狀態的程序集合,其中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 死鎖產生的必要條件 加鎖順序 執行緒按照一定的順序...

避免死鎖的產生

死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。第乙個建議往往是最簡單的 乙個執行緒已獲得乙個鎖時,再別去獲取第二個。如果能堅持這個建議,因...

什麼是死鎖?如何避免死鎖? 以及實現執行緒死鎖才程式

所謂死鎖 是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。由於資源占用是互斥的,當某個程序提出申請資源後,使得有關程序在無外力協助下,永遠分配不到必需的資源而...