死鎖的原因是什么
雖然進程在運行過程中,可能發(fā)生死鎖,但死鎖的發(fā)生也有一定的原因。那么,死鎖的原因是什么?死鎖的處理方法是什么?下面就由學(xué)習(xí)啦小編告訴大家吧!
死鎖的原因是什么
1、系統(tǒng)資源不足
2、進程推進順序非法
必要條件:
1、 互斥條件
2、 不剝奪條件(非搶占)
3、 占有并等待(部分分配)
4、 環(huán)路條件
產(chǎn)生死鎖的根本原因:
產(chǎn)生死鎖的根本原因是系統(tǒng)能夠提供的資源個數(shù)比請求該資源的進程數(shù)要少。
死鎖的處理方法
在系統(tǒng)中已經(jīng)出現(xiàn)死鎖后,應(yīng)該及時檢測到死鎖的發(fā)生,并采取適當(dāng)?shù)?a href='http://www.zbfsgm.com/fwn/cuoshi/' target='_blank'>措施來解除死鎖。目前處理死鎖的方法可歸結(jié)為以下四種:
1)預(yù)防死鎖。
這是一種較簡單和直觀的事先預(yù)防的方法。方法是通過設(shè)置某些限制條件,去破壞產(chǎn)生死鎖的四個必要條件中的一個或者幾個,來預(yù)防發(fā)生死鎖。預(yù)防死鎖是一種較易實現(xiàn)的方法,已被廣泛使用。但是由于所施加的限制條件往往太嚴(yán)格,可能會導(dǎo)致系統(tǒng)資源利用率和系統(tǒng)吞吐量降低。
2)避免死鎖。
該方法同樣是屬于事先預(yù)防的策略,但它并不須事先采取各種限制措施去破壞產(chǎn)生死鎖的的四個必要條件,而是在資源的動態(tài)分配過程中,用某種方法去防止系統(tǒng)進入不安全狀態(tài),從而避免發(fā)生死鎖。
3)檢測死鎖。
這種方法并不須事先采取任何限制性措施,也不必檢查系統(tǒng)是否已經(jīng)進入不安全區(qū),此方法允許系統(tǒng)在運行過程中發(fā)生死鎖。但可通過系統(tǒng)所設(shè)置的檢測機構(gòu),及時地檢測出死鎖的發(fā)生,并精確地確定與死鎖有關(guān)的進程和資源,然后采取適當(dāng)措施,從系統(tǒng)中將已發(fā)生的死鎖清除掉。
檢測方法包括定時檢測、效率低時檢測、進程等待時檢測等。
4)解除死鎖。
這是與檢測死鎖相配套的一種措施。當(dāng)檢測到系統(tǒng)中已發(fā)生死鎖時,須將進程從死鎖狀態(tài)中解脫出來。常用的實施方法是撤銷或掛起一些進程,以便回收一些資源,再將這些資源分配給已處于阻塞狀態(tài)的進程,使之轉(zhuǎn)為就緒狀態(tài),以繼續(xù)運行。死鎖的檢測和解除措施,有可能使系統(tǒng)獲得較好的資源利用率和吞吐量,但在實現(xiàn)上難度也最大。