銀行家演算法解決死鎖

2021-09-14 05:54:46 字數 1015 閱讀 9664

you死鎖

產生死鎖的根本原因在於系統提供的資源個數少於併發程序所要求的該類資源數。產生死鎖有四個必要條件:1.互斥條件;2.不可搶占條件;3.保持和等待條件(部分分配條件);4.迴圈等待條件;

1.互斥條件:即乙個資源每次只能被乙個程序使用

2.保持和等待條件:有乙個程序已獲得了一些資源,但因請求其他資源被阻塞時候,對獲得的資源保持不放

3.不可搶占條件:有些系統資源是不可被強佔的,當某個程序已獲得這種資源後,系統不能強行收回,只能由程序使用完時自己釋放

4.迴圈等待條件:若干個程序形成環形鏈,每個占用對方要申請的下乙個資源

銀行家演算法

銀行家演算法是指在分配資源之前先看清楚資源分配以後是否會導致死鎖,如果會死鎖,則不分配,否則就分配

按照銀行家演算法的思想,當程序請求資源時,系統將按如下原則分配資源:

(1)當乙個程序對資源的最大需求量不超過系統中的資源數時可以接納該程序

(2)程序可以分期請求資源,但請求的總數不能超過最大需求量

(3)當系統現有的資源不能滿足程序尚需資源數的時候,對程序的請求可以推遲分配,但總能使程序在有限的資源裡面得到資源

(4)當系統現有的資源能滿足程序尚需資源數的時候,必須測試系統現存的資源能否滿足發i程序尚需的最大資源數,若能滿足則按當前的申請量分配資源,否則也要推遲分配

個人觀點

首先要記住必要條件,模擬一下死鎖過程,才會記得比較清晰

順便提一下,如果你的程式只有1個程序,但是該程式需要3個單位的資源數,結果一共就2個單位的資源,這到底算不算死鎖?確實系統提供的資源個數少於程序的該類的資源數,但是並不全滿足死鎖的四大必要條件,而且這個並不是併發執行緒,僅僅單執行緒而已。

public class classa

public void run1()}}

public void run2()}}

}

linux時候底層epoll windows時iocp

解決死鎖 銀行家演算法透析

死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。避免死鎖演算法中最有代表性的演算法是dijkstra e.w 於1968年提出的銀行家演算法...

死鎖,銀行家演算法

我們知道作業系統中很多種資源,如cpu,記憶體,io裝置等,每種資源又有很多例項,對於這些資源,程序該如何訪問?請求 獲取 申請空閒資源 使用 占用 程序占用資源 釋放 資源狀態由占用變為空閒 為了更好的了解死鎖,我們將資源分類 1 預防死鎖。這是一種較簡單和直觀的事先預防的方法。方法是通過設定某些...

死鎖與銀行家演算法

死鎖定義 死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。死鎖條件 1 互斥條件 指程序對所分配到的資源進行排它性使用,即在一段時間內某資源...