java死锁详解
進程死鎖及解決辦法:
??????? 一:死鎖的概念:
??????????????? 死鎖是進程死鎖的簡稱
??????????????? 什么是死鎖:
??????????????????????? 死鎖是指多個進程循環(huán)等待他方占有的資源而無限的僵持下去的局面。很顯然,沒有外力作用,那么死鎖涉及到的各個進程都將永遠處于>封鎖狀態(tài)。計算機系統(tǒng)產(chǎn)生死鎖的根本原因就是資源有限且操作不當(dāng)。即為:一種原因是系統(tǒng)提供的資源太少了,遠不能滿足并發(fā)進程對資源的需求。這種競爭資源>引起的死鎖是我們將要討論的核心。例如:一種臨時性資源。某一時刻,進程A等待進程B發(fā)來的信息,進程B等待進程C發(fā)來的信息,而進程C又等待進程A發(fā)來的信息>。信息未到,A、B、C三個進程均無法向前推進,也會發(fā)生進程通信上的死鎖。另一種原因是進程推進順序不合適而引發(fā)的死鎖。資源少也未必一定產(chǎn)生死鎖。就如同
兩個人過獨木橋,如果兩個人同時過必然會競爭資源而產(chǎn)生死鎖。
??????????????? 產(chǎn)生死鎖的四個必要條件:
??????????????????????? 1,互斥條件:即為某個資源在一段時間內(nèi)只能由一個進程占有,不能同時被兩個或者兩個以上的進程占有。
??????????????????????? 2,不可搶占條件:進程所獲得的資源在未使用完畢之前,資源申請者不能強行從資源占有者手中奪取資源,而只能由該資源占有者自行釋
放。
??????????????????????? 3,占有且申請條件:進程至少已經(jīng)占有一個條件,但又申請新的資源;由于該資源已被另外進程占有,此時該進程阻塞;但是,他在等待
新的資源之時,仍然繼續(xù)占有已占用的資源。
??????????????????????? 4,換路等待:存在一個進程等待序列{P1,p2,..,pn}其中P1等待P2所占有的資源,P2等待P3占有的資源,.....,而Pn等待P1所占有的資源
,形成一個進程循環(huán)等待環(huán)。
??????? 上面我們說這四個條件在死鎖時會同時發(fā)生。也就是說,只要有一個辟謠條件不滿足,則死鎖就可以排除。
??????? 死鎖的預(yù)防:
??????????????? 一般的,解決死鎖的方法分為死鎖的預(yù)防,避免,檢測與恢復(fù)三種。
??????????????? 死鎖的預(yù)防是保證系統(tǒng)不進入死鎖狀態(tài)的一種策略。它的基本思想就是要求進程申請資源時遵循某種協(xié)議,從而打破產(chǎn)生死鎖的四個必要條件中的>一個或者多個,保證系統(tǒng)不會進入死鎖狀態(tài)。
??????????????? 1)打破互斥條件。即為允許進程同時訪問某些資源。
??????????????? 2)打破不可搶占條件。即為允許進程強行從占有者那里奪取某些資源。
??????????????? 3)打破占有且申請條件。即為可以實行資源預(yù)分配策略。
????????????????? 缺點:1,在許多情況下,進程在執(zhí)行之前不可能知道它所需要的全部資源。
??????????????????????? 2,資源利用率低。
??????????????????????? 3,降低了進程的并發(fā)性。
??????????????? 4)打破循環(huán)等待條件,實行資源有序分配策略。
??????????????????????? 缺點:
、????????????????????????????? 1,限制了進程對資源的請求
??????????????????????????????? 2,為了遵循按編號申請的次序,暫不使用的資源也需要提前申請,從而增加了進行對資源的占用時間。
??????? 死鎖的避免:
??????????????? 對進程發(fā)出的每一個申請資源命令加以動態(tài)的檢查,并根據(jù)檢查結(jié)果決定是否進行資源分配。就是說,在資源分配的過程中若預(yù)測有發(fā)生死鎖的可>能性,則加以避免。這種方法的關(guān)鍵是確定資源分配的安全性。
??????????????? 1,安全序列:
??????????????????????? 所謂系統(tǒng)是安全的,是指系統(tǒng)中的所有進程能夠按照某一種次序分配資源,并且依次的運行完畢,這種進程序列{P1,P2,..,Pn}就是安全序
列。安全序列是這樣組成的:若對于每一個進程Pi,它需要的附加資源可以被系統(tǒng)中當(dāng)前可用資源加上所有進程Pj當(dāng)前占有資源之和所滿足,則{P1,P2,...,Pn}為一個
安全序列,這時系統(tǒng)處于安全狀態(tài),不會進入死鎖狀態(tài)。
??????????????? 2,銀行家算法:
??????????????????????? 銀行家算法就是從當(dāng)前狀態(tài)出發(fā),逐個按安全序列檢查各客戶誰能完成其工作,然后嘉定其完成工作且歸還全部貸款,再檢查下一個能完>成工作的客戶,....。如果所有客戶都能完成工作,則找到一個安全序列,銀行家才安全
??????? 死鎖的檢測與恢復(fù):
??????????????? 死鎖檢測與恢復(fù)是指系統(tǒng)設(shè)有專門機構(gòu),當(dāng)死鎖發(fā)生時,該機構(gòu)能夠檢測到死鎖發(fā)生的位置和原因,并能通過外力破壞死鎖發(fā)生的必要條件,從而>使得進程從死鎖的狀態(tài)中恢復(fù)出來。
??????? 一:死鎖的概念:
??????????????? 死鎖是進程死鎖的簡稱
??????????????? 什么是死鎖:
??????????????????????? 死鎖是指多個進程循環(huán)等待他方占有的資源而無限的僵持下去的局面。很顯然,沒有外力作用,那么死鎖涉及到的各個進程都將永遠處于>封鎖狀態(tài)。計算機系統(tǒng)產(chǎn)生死鎖的根本原因就是資源有限且操作不當(dāng)。即為:一種原因是系統(tǒng)提供的資源太少了,遠不能滿足并發(fā)進程對資源的需求。這種競爭資源>引起的死鎖是我們將要討論的核心。例如:一種臨時性資源。某一時刻,進程A等待進程B發(fā)來的信息,進程B等待進程C發(fā)來的信息,而進程C又等待進程A發(fā)來的信息>。信息未到,A、B、C三個進程均無法向前推進,也會發(fā)生進程通信上的死鎖。另一種原因是進程推進順序不合適而引發(fā)的死鎖。資源少也未必一定產(chǎn)生死鎖。就如同
兩個人過獨木橋,如果兩個人同時過必然會競爭資源而產(chǎn)生死鎖。
??????????????? 產(chǎn)生死鎖的四個必要條件:
??????????????????????? 1,互斥條件:即為某個資源在一段時間內(nèi)只能由一個進程占有,不能同時被兩個或者兩個以上的進程占有。
??????????????????????? 2,不可搶占條件:進程所獲得的資源在未使用完畢之前,資源申請者不能強行從資源占有者手中奪取資源,而只能由該資源占有者自行釋
放。
??????????????????????? 3,占有且申請條件:進程至少已經(jīng)占有一個條件,但又申請新的資源;由于該資源已被另外進程占有,此時該進程阻塞;但是,他在等待
新的資源之時,仍然繼續(xù)占有已占用的資源。
??????????????????????? 4,換路等待:存在一個進程等待序列{P1,p2,..,pn}其中P1等待P2所占有的資源,P2等待P3占有的資源,.....,而Pn等待P1所占有的資源
,形成一個進程循環(huán)等待環(huán)。
??????? 上面我們說這四個條件在死鎖時會同時發(fā)生。也就是說,只要有一個辟謠條件不滿足,則死鎖就可以排除。
??????? 死鎖的預(yù)防:
??????????????? 一般的,解決死鎖的方法分為死鎖的預(yù)防,避免,檢測與恢復(fù)三種。
??????????????? 死鎖的預(yù)防是保證系統(tǒng)不進入死鎖狀態(tài)的一種策略。它的基本思想就是要求進程申請資源時遵循某種協(xié)議,從而打破產(chǎn)生死鎖的四個必要條件中的>一個或者多個,保證系統(tǒng)不會進入死鎖狀態(tài)。
??????????????? 1)打破互斥條件。即為允許進程同時訪問某些資源。
??????????????? 2)打破不可搶占條件。即為允許進程強行從占有者那里奪取某些資源。
??????????????? 3)打破占有且申請條件。即為可以實行資源預(yù)分配策略。
????????????????? 缺點:1,在許多情況下,進程在執(zhí)行之前不可能知道它所需要的全部資源。
??????????????????????? 2,資源利用率低。
??????????????????????? 3,降低了進程的并發(fā)性。
??????????????? 4)打破循環(huán)等待條件,實行資源有序分配策略。
??????????????????????? 缺點:
、????????????????????????????? 1,限制了進程對資源的請求
??????????????????????????????? 2,為了遵循按編號申請的次序,暫不使用的資源也需要提前申請,從而增加了進行對資源的占用時間。
??????? 死鎖的避免:
??????????????? 對進程發(fā)出的每一個申請資源命令加以動態(tài)的檢查,并根據(jù)檢查結(jié)果決定是否進行資源分配。就是說,在資源分配的過程中若預(yù)測有發(fā)生死鎖的可>能性,則加以避免。這種方法的關(guān)鍵是確定資源分配的安全性。
??????????????? 1,安全序列:
??????????????????????? 所謂系統(tǒng)是安全的,是指系統(tǒng)中的所有進程能夠按照某一種次序分配資源,并且依次的運行完畢,這種進程序列{P1,P2,..,Pn}就是安全序
列。安全序列是這樣組成的:若對于每一個進程Pi,它需要的附加資源可以被系統(tǒng)中當(dāng)前可用資源加上所有進程Pj當(dāng)前占有資源之和所滿足,則{P1,P2,...,Pn}為一個
安全序列,這時系統(tǒng)處于安全狀態(tài),不會進入死鎖狀態(tài)。
??????????????? 2,銀行家算法:
??????????????????????? 銀行家算法就是從當(dāng)前狀態(tài)出發(fā),逐個按安全序列檢查各客戶誰能完成其工作,然后嘉定其完成工作且歸還全部貸款,再檢查下一個能完>成工作的客戶,....。如果所有客戶都能完成工作,則找到一個安全序列,銀行家才安全
??????? 死鎖的檢測與恢復(fù):
??????????????? 死鎖檢測與恢復(fù)是指系統(tǒng)設(shè)有專門機構(gòu),當(dāng)死鎖發(fā)生時,該機構(gòu)能夠檢測到死鎖發(fā)生的位置和原因,并能通過外力破壞死鎖發(fā)生的必要條件,從而>使得進程從死鎖的狀態(tài)中恢復(fù)出來。
總結(jié)
- 上一篇: [转载]GSview注册码
- 下一篇: Jmeter性能测试案例(一)