死鎖的產生與避免

2021-10-01 23:41:39 字數 868 閱讀 5557

死鎖是指兩個或兩個以上的執行緒在執行過程中,因爭奪資源而造成的互相等待的現象,在無外力作用的情況下,這些執行緒會一直相互等待而無法繼續執行下去。

死鎖的產生必須具備以下四個條件:

互斥條件: 指執行緒對己經獲取到的資源進行排它性使用 , 即該資源同時只由 乙個執行緒占用。

請求並持有條件 : 指乙個執行緒己經持有了至少乙個 資源 , 但又提出了新的資源請求 ,而新資源己被其他執行緒占有,所 以當前執行緒會被阻塞 ,但阻塞的同時並不釋放自己己經獲取的資源。

不可剝奪條件 : 指執行緒獲取到的資源在自己使用完之前不能被其他執行緒搶占 , 只有在自己使用完畢後才由自己釋放該資源。

環路等待條件 : 指在發生死鎖時 , 必然存在乙個執行緒→資源的環形鏈 , 即執行緒集合中的to 正在等待乙個 tl 占用的資源 , tl 正在等待 t2 占用的資源,……tn 正在等待 己被 to 占用 的資源。

示例:

public class wait  catch (interruptedexception e) 

synchronized(lockb)

}} }

static class threadb extends thread catch (interruptedexception e)

synchronized(locka)

}} }

public static void main(string args) throws interruptedexception

}

造成死鎖的原因其實和申請資源的順序有很大關係 , 使用資源申請的有序性原則就可以避免死鎖。

避免死鎖的產生

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

死鎖,產生原因,避免

什麼是死鎖 死鎖是指多個程序因競爭資源而造成的一種僵局 互相等待 若無外力作用,這些程序都將無法向前推進。例如,在某乙個計算機系統中只有一台印表機和一台輸入 裝置,程序p1正占用輸入裝置,同時又提出使用印表機的請求,但此時印表機正被程序p2 所占用,而p2在未釋放印表機之前,又提出請求使用正被p1占...

死鎖的產生,防止,避免

在多工系統下,當乙個或多個程序等待對方的資源,而在等待對方資源之前不會釋放得到的資源,這樣造成迴圈等待的一種現象。競爭系統資源 程序的推進順序不當 1.資源互斥 資源不共享 每個資源要麼已經分配給乙個程序,要麼是可用的,只有這兩種狀態,資源不可以被共享使用 2.請求並保持 已經的到資源的程序還可以繼...