什么是死锁?死锁产生的四个必要条件?如何避免与预防死锁?
一:什么是死鎖
死鎖是指多個進程因競爭資源而造成的一種僵局(互相等待),若無外力作用,這些進程都將無法向前推進。例如,在某一個計算機系統中只有一臺打印機和一臺輸入 設備,進程P1正占用輸入設備,同時又提出使用打印機的請求,但此時打印機正被進程P2 所占用,而P2在未釋放打印機之前,又提出請求使用正被P1占用著的輸入設備。這樣兩個進程相互無休止地等待下去,均無法繼續執行,此時兩個進程陷入死鎖狀態。
二:死鎖產生的原因
1. 系統資源的競爭
系統資源的競爭導致系統資源不足,以及資源分配不當,導致死鎖。
2. 進程運行推進順序不合適
進程在運行過程中,請求和釋放資源的順序不當,會導致死鎖。
三:產生死鎖的四個必要條件:
(1)互斥條件:一個資源每次只能被一個進程使用,即在一段時間內某 資源僅為一個進程所占有。此時若有其他進程請求該資源,則請求進程只能等待。
(2)請求與保持條件:進程已經保持了至少一個資源,但又提出了新的資源請求,而該資源 已被其他進程占有,此時請求進程被阻塞,但對自己已獲得的資源保持不放。
(3)不可剝奪條件:進程所獲得的資源在未使用完畢之前,不能被其他進程強行奪走,即只能 由獲得該資源的進程自己來釋放(只能是主動釋放)。
(4)循環等待條件: 若干進程間形成首尾相接循環等待資源的關系
這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會發生死鎖。
四:死鎖的避免與預防:
死鎖避免的基本思想:
系統對進程發出每一個系統能夠滿足的資源申請進行動態檢查,并根據檢查結果決定是否分配資源,如果分配后系統可能發生死鎖,則不予分配,否則予以分配。這是一種保證系統不進入死鎖狀態的動態策略。
理解了死鎖的原因,尤其是產生死鎖的四個必要條件,就可以最大可能地避免、預防和解除死鎖。所以,在系統設計、進程調度等方面注意如何讓這四個必要條件不成立,如何確定資源的合理分配算法,避免進程永久占據系統資源。此外,也要防止進程在處于等待狀態的情況下占用資源。因此,對資源的分配要給予合理的規劃。
死鎖避免和死鎖預防的區別:
死鎖預防是設法至少破壞產生死鎖的四個必要條件之一,嚴格的防止死鎖的出現,而死鎖避免則不那么嚴格的限制產生死鎖的必要條件的存在,因為即使死鎖的必要條件存在,也不一定發生死鎖。死鎖避免是在系統運行過程中注意避免死鎖的最終發生
總結
以上是生活随笔為你收集整理的什么是死锁?死锁产生的四个必要条件?如何避免与预防死锁?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++是类型安全的吗?
- 下一篇: C和C++结构体的区别