死鎖的條件
互斥條件(mutual exclusion) :資源不能被共享,只能由乙個程序使用。
請求與保持條件(hold and wait)
:程序已獲得了一些資源,但因請求其它資源被阻塞時,對已獲得的資源保持不放。
不可搶占條件(no pre-emption) :有些系統資源是不可搶占的,當某個程序已獲得這種資源後,系統不能強行收回,只能由程序使用完時自己釋放
。迴圈等待條件(circular wait) :若干個程序形成環形鏈,每個都占用對方申請的下乙個資源
。處理死鎖的策略
1、忽略該問題。例如鴕鳥演算法
。2、檢測死鎖並且恢復。
3、仔細地對資源進行動態分配,以避免死鎖。
4、通過破除死鎖四個必要條件之一,來防止死鎖產生。
鴕鳥演算法:
該演算法可以應用在極少發生死鎖的的情況下。為什麼叫鴕鳥演算法呢,因為傳說中鴕鳥看到危險就把頭埋在地底下,可能鴕鳥覺得看不到危險也就沒危險了吧。跟掩耳盜鈴有點像。
銀行家演算法:
所謂銀行家演算法,是指在分配資源之前先看清楚,資源分配後是否會導致系統死鎖。如果會死鎖,則不分配,否則就分配。
按照銀行家演算法的思想,當程序請求資源時,系統將按如下原則分配系統資源:
(1) 當乙個程序對資源的最大需求量不超過系統中的資源數時可以接納該程序。
(2) 程序可以分期請求資源,當請求的總數不能超過最大需求量。
(3) 當系統現有的資源不能滿足程序尚需資源數時,對程序的請求可以推遲分配,但總能使程序在有限的時間裡得到資源。
(4) 當系統現有的資源能滿足程序尚需資源數時,必須測試系統現存的資源能否滿足該程序尚需的最大資源數,若能滿足則按當前的申請量分配資源,否則也要推遲分配。
解決死鎖的策略
對待死鎖的策略主要有:
(1) 死鎖預防:破壞導致死鎖必要條件中的任意乙個就可以預防死鎖。例如,要求使用者申請資源時一次性申請所需要的全部資源,這就破壞了保持和等待條件;將資源分層,得到上一層資源後,才能夠申請下一層資源,它破壞了環路等待條件。預防通常會降低系統的效率。
(2) 死鎖避免:避免是指程序在每次申請資源時判斷這些操作是否安全,例如,使用銀行家演算法。死鎖避免演算法的執行會增加系統的開銷。
(3) 死鎖檢測:死鎖預防和避免都是事前措施,而死鎖的檢測則是判斷系統是否處於死鎖狀態,如果是,則執行死鎖解除策略。
(4) 死鎖解除:這是與死鎖檢測結合使用的,它使用的方式就是剝奪。即將某程序所擁有的資源強行收回,分配給其他的程序。
死鎖的避免:
死鎖的預防是通過破壞產生條件來阻止死鎖的產生,但這種方法破壞了系統的並行性和併發性。
死鎖產生的前三個條件是死鎖產生的必要條件,也就是說要產生死鎖必須具備的條件,而不是存在這3個條件就一定產生死鎖,那麼只要在邏輯上迴避了第四個條件就可以避免死鎖。
避免死鎖採用的是允許前三個條件存在,但通過合理的資源分配演算法來確保永遠不會形成環形等待的封閉程序鏈,從而避免死鎖。該方法支援多個程序的並行執行,為了避免死鎖,系統動態的確定是否分配乙個資源給請求的程序。方法如下:
1.如果乙個程序的當前請求的資源會導致死鎖,系統拒絕啟動該程序;
2.如果乙個資源的分配會導致下一步的死鎖,系統就拒絕本次的分配;
顯然要避免死鎖,必須事先知道系統擁有的資源數量及其屬性
android ANR產生原因和解決辦法
預設情況下,在android中activity的最長執行時間是5秒,broadcastreceiver的最長執行時間則是10秒。第一 什麼會引發anr?在android裡,應用程式的響應性是由activity manager和windowmanager系統服務監視的 當它監測到以下情況中的乙個時,a...
android ANR產生原因和解決辦法
預設情況下,在android中activity的最長執行時間是5秒,broadcastreceiver的最長執行時間則是10秒。第一 什麼會引發anr?在android裡,應用程式的響應性是由activity manager和windowmanager系統服務監視的 當它監測到以下情況中的乙個時,a...
Android ANR產生原因和解決辦法
android anr產生原因和解決辦法 anr分類 一般分為3種 1 keydispatchtimeout 5 seconds 主要情況 按鍵或觸控事件在特定時間內無響應 2 broadcasttimeout 10 seconds broadcastreceiver在特定時間內無法處理完成 3 s...