DANCE WITH JAVA

          開發出高質量的系統

          常用鏈接

          統計

          積分與排名

          好友之家

          最新評論

          死鎖

          引發死鎖的條件:
          必須滿足以下四種條件
          1,互斥條件,每個資源要么已經分配給一個進程,要么就是可用的。
          2,占有等待條件,已經得到了某個資源的進程可以再請求新的資源
          3,不可搶占條件,已經分配給一個進程的資源不能強制的被搶占,只能被占有他的進程顯示的釋放
          4,環路等待條件,死鎖發生時,系統中一定有兩個或者兩個以上的進程組成一環路,該環路中的每一個

          進程都在等待下一個進程占有的資源。

          處理死鎖的策略:
          1,忽略該問題,你忽略它,它也會忽略你
          2,測試死鎖并恢復,讓死鎖發生,檢測,一旦檢測到,恢復
          3,仔細對資源進行分配,動態避免死鎖
          4,通過破壞四個死鎖條件之一

          方法一對應的時鴕鳥算法,就是出現這種死鎖的可能性很低,比如操作系統的fork,可能5年出現一次,

          而在這段過程中,因為硬件等其它原因肯定要重新啟動機器,放棄fork損失太大,就可以忽略這種死鎖

          ,象鴕鳥一樣,把頭埋進沙子,當什么都沒發生。

          方法二:檢測并恢復
          恢復方法有:
          ?搶占恢復
          ?回退恢復
          ?殺死進程恢復
          銀行家算法:
          如果有4個人(A,B,C,D)去銀行貸款,銀行有金額10個單位,
          A貸款最大為6 ,A已經貸款1
          B貸款最大為5 ,B已經貸款1
          C貸款最大為4 ,C已經貸款2
          D貸款最大為7 ,D已經貸款4
          這個時候只有C的請求能通過,因為現在還有可用貸款2,只有C才能完成,然后釋放更多,來讓其它完成
          這個時候如果給其它任何一個單位的貸款,那么所有的人都不能達到需求,完成。
          銀行家問題時個經典的問題,但是很少能得到實際的利用,因為每個客戶自己都不知道自己需要多少資

          源,同時,也不知道有多少個客戶。因為不停的有用戶login ,logout

          方法四:破壞條件
          1,破壞互斥條件,不讓獨占出現,
          例如不讓一個用戶獨占打印機,如spooling技術,讓多個用戶同時進入spooling
          問題:可能在spooling中產生死鎖
          2,破壞占有等待條件
          檢測這個進程需要的所有資源是不是可用,如果可用分配,不可用的話就等待
          問題:進程要在開始知道自己需要多少資源,這樣可以使用銀行家算法完成。
          但是資源利用不是最優。
          3,破壞不可搶占,這個實現起來最困難
          4,破壞閉環
          把所有資源編號,按照順序請求

          饑餓:
          與死鎖很接近的時饑餓
          如果一個打印機的使用,是通過某種算法避免死鎖,但是每次都是最小文件先打印,這樣就可能產生一

          種情況,大的文件永遠不能打印,饑餓而死。

          posted on 2006-09-20 21:29 dreamstone 閱讀(720) 評論(1)  編輯  收藏 所屬分類: 基礎

          評論

          # re: 死鎖[未登錄] 2008-06-08 13:27 liu

          java多線呈死鎖的解決辦法   回復  更多評論   

          主站蜘蛛池模板: 宜都市| 仙桃市| 蓬溪县| 墨竹工卡县| 临城县| 清镇市| 太湖县| 淅川县| 堆龙德庆县| 偏关县| 延津县| 江安县| 行唐县| 措勤县| 遵化市| 布尔津县| 三穗县| 时尚| 平凉市| 弥渡县| 邛崃市| 巴东县| 黄骅市| 安新县| 永德县| 安远县| 屏东县| 玉林市| 西峡县| 天气| 江陵县| 巍山| 万盛区| 和平区| 遂宁市| 水富县| 且末县| 宁海县| 萍乡市| 广饶县| 华蓥市|