DANCE WITH JAVA

          開發(fā)出高質(zhì)量的系統(tǒng)

          常用鏈接

          統(tǒng)計

          積分與排名

          好友之家

          最新評論

          死鎖

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

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

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

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

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

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

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

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

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

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

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

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

          評論

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

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

          主站蜘蛛池模板: 玉林市| 博客| 海南省| 伊通| 西青区| 吉木萨尔县| 蕉岭县| 宁都县| 若尔盖县| 阜南县| 竹溪县| 屏山县| 贞丰县| 阿克苏市| 四平市| 伊吾县| 霍城县| 海晏县| 宜昌市| 永和县| 通海县| 洪湖市| 丰原市| 新晃| 南城县| 达尔| 全椒县| 屏东市| 辉南县| 潞西市| 昌黎县| 鄱阳县| 公安县| 阿坝县| 绥德县| 太仆寺旗| 南昌县| 台前县| 乐昌市| 上思县| 德化县|