死鎖是指多個程序迴圈等待彼此占有的資源而無限期的僵持等待下去的局面。原因是:
需要同時具有以下四個條件:
為使系統不發生死鎖,必須設法破壞產生死鎖的四個必要條件之一,或者允許死鎖產生,但當死鎖發生時能檢測出思索,並有能力實現恢復。
一般有死鎖的預防、死鎖避免、死鎖的檢測與恢復三種方法。
(1) 死鎖預防:破壞導致死鎖必要條件中的任意乙個就可以預防死鎖。例如,要求使用者申請資源時一次性申請所需要的全部資源,這就破壞了保持和等待條件;將資源分層,得到上一層資源後,才能夠申請下一層資源,它破壞了環路等待條件。預防通常會降低系統的效率。
(2) 死鎖避免:避免是指程序在每次申請資源時判斷這些操作是否安全,例如,使用銀行家演算法。死鎖避免演算法的執行會增加系統的開銷。
(3) 死鎖檢測:死鎖預防和避免都是事前措施,而死鎖的檢測則是判斷系統是否處於死鎖狀態,如果是,則執行死鎖解除策略。
(4) 死鎖解除:這是與死鎖檢測結合使用的,它使用的方式就是剝奪。即將某程序所擁有的資源強行收回,分配給其他的程序。
死鎖預防:
死鎖避免
允許程序動態的申請資源,但系統在進行資源分配前,應先計算此次資源分配的安全性。若此次分配不會導致系統進入不安全狀態,則將資源你分配給程序,否則,讓程序等待。
所謂安全狀態,是指系統能按某種程序推進順序,為每個程序分配其所需的資源,直至滿足每個程序對資源的最大需求,是每個程序都可以順序的完成。此時成p1p2p3...為安全序列,如果系統無法找到乙個安全序列,則稱系統處於不安全狀態。
並非所有的不安全狀態都是死鎖狀態,但當系統進入不安全狀態後,便可能進入死鎖狀態;反之,只要系統處於安全狀態,系統便可以避免進入死鎖狀態。
銀行家演算法是最著名的死鎖避免演算法。
死鎖的檢測
資源分配圖&&死鎖定理
死鎖解除
1)資源剝奪法。掛起某些思索程序,並搶占它的資源,將這些資源分配給其他的死鎖程序。但應防止被掛起的程序長時間得不到資源時,而處於資源匱乏的狀態。
2)程序撤銷法。強制撤銷乙個或一部分程序並剝奪這些程序的資源。撤銷的原則可以按程序的優先順序和撤銷程序代價的高低進行。
3)程序回退法。讓乙個或多個程序回退到足以迴避死鎖的地步,程序回退時資源釋放資源而不是被剝奪。要求系統保持程序的歷史資訊,設定還原點。
死鎖產生原因及解決方法
死鎖 執行緒級 死鎖是指兩個或兩個以上的執行緒在執行過程中,由於競爭資源而造成的一種阻塞的現象 產生的4個條件 1 互斥使用 即乙個執行緒在使用時,另外執行緒不可使用 2 不可搶占資源 資源請求者不能強制從資源佔有者手中奪取資源 3 占有且等待 當前執行緒在請求其他資源時,保持對原有資源占有 4 迴...
程序死鎖的危害 導致原因 解決方法
在多個程式同時執行的情況下,多個程序可能出現競爭一定數量的資源。若某個程序申請資源,且此時資源不可用,那麼該進行將進入等待狀態。如果所申請的資源被其他等待程序占有,那麼該等待程序有可能永遠處於等待狀態而無法改變該狀態。這種情況即為死鎖。或許你認為程序死鎖就死鎖唄,那又能怎麼樣?那麼先說出它的危害吧!...
死鎖解決方法
死鎖是程序併發執行過程中可能出現的現象,哲學家就餐問題是描述死鎖的經典例子。為了防止死鎖,可以採用資源預分配法或者資源按序分配法。資源預分配法是指程序在執行前一次性地向系統申請它所需要的全部資源,如果系統當前不能夠滿足程序的全部資源請求,則不分配資源,此程序暫不投入執行,如果系統當前能夠滿足程序的全...