面試 程序死鎖

2021-08-11 08:27:41 字數 1380 閱讀 2941

程序死鎖

死鎖的定義:死鎖就是乙個程序集合中的多個程序因為競爭資源,而造成的互相等待現象。如:a和b吃餃子,a拿著醬油,b拿著醋,a想要醋,b想要醬油,結果二者死等吃不上餃子。

死鎖的原因:系統資源不足;多個程序的推進順序不合理;資源分配不當

死鎖的必要條件:

(1)互斥條件(mutual exclusion):資源不能被共享,只能由乙個程序使用。

(2)請求與保持條件(holdand wait):已經得到資源的程序可以再次申請新的資源。

(3)非剝奪條件(nopre-emption):已經分配的資源不能從相應的程序中被強制地剝奪。

(4)迴圈等待條件(circular wait):系統中若干程序組成環路,改環路中每個程序都在等待相鄰程序正占用的資源。

處理死鎖的方法有四種:1)

預防死鎖    2)

避免死鎖    3)檢測和解除死鎖

預防死鎖

:破壞四個必要條件之一即可

①破壞互斥條件:讓資源允許共享,如spooling技術就可以允許若干個程序同時產生列印資料,

缺點: spooling的技術並不適用於所有的資源,如程序表等,所以破壞資源的互斥性是比較困難的,該方法並不是很好 ②

破壞請求和保持條件:資源一次性分配。

缺點:採取這種機制,那麼程序在執行過程中就不再申請資源了,但這種方法的效率極低,資源無法得到充分的利用。

③破壞不可剝奪條件:有兩種方法,一種是當其申請的資源得不到滿足時,也必須放棄其原先占有的資源;另一種方法是只適用於申請資源的程序優先順序比占有該資源的程序優先順序高時,如果乙個程序申請的資源被其它程序占用,而申請程序的優先順序較高,那麼它可以強迫占有資源的程序放棄。這種方法一般適用於處理機和儲存資源。

④破壞迴圈等待條件:

系統給每類資源賦予乙個編號,每乙個程序按編號遞增的順序請求資源,釋放則相反

(如:哲學家進餐問題

)避免死鎖的方法有兩種:1)

資源按序分配   2)

銀行家演算法。

解除死鎖的方法有兩種:1)

資源剝奪法   2)

撤消程序法   3)程序回退法

死鎖定理:s為死鎖的條件是當且僅當s狀態的資源分配圖是不可完全簡化的,該條件為死鎖定理。(即:資源分配圖不可完全簡化)

如下是資源分配圖的化簡過程。

程序p1已經分得了2個r1資源,並又請求乙個r2資源;程序p2分得了乙個r1資源和乙個r2資源,並又請求了乙個r1資源。===>先滿足p1,獲得乙個r2,完成後釋放自己占有的2個r1資源和乙個r2資源。===>p2請求乙個r1資源,完成後釋放自己占有的2個r1資源和乙個r2資源。最後資源分配圖完全簡化了,說明此過程沒有發生死鎖。

oracle 程序死鎖

oracle 程序死鎖 select b.owner,b.object name,a.session id,a.locked mode from v locked object a,dba objects b where b.object id a.object id select b.userna...

C 程序死鎖

所謂死鎖 是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。由於資源占用是互斥的,當某個程序提出申請資源後,使得有關程序在無外力協助下,永遠分配不到必需的資源而...

程序的死鎖

產生死鎖的四個條件同時具備 互斥條件 不可搶占條件 占有且申請條件 迴圈等待條件 為什麼會有死鎖 若干程序競爭 有限資源,又 推進順序不當,從而構成無限迴圈等待的局面,這種狀態叫做死鎖。所謂死鎖是指多個程序迴圈等待它方占有的資源而無限期的僵持下去的局面。死鎖原因 一種原因是系統提供的資源太少,遠不能...