什麼是死鎖?怎樣避免死鎖的產生?

2021-10-04 08:40:19 字數 1061 閱讀 7789

死鎖是指兩個或兩個以上的程序在執行過程中,因爭奪資源或不正確的程序間推進順序,而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去,此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。

雖然程序在執行過程中,可能發生死鎖,但死鎖的發生也必須具備一定的條件,死鎖的發生必須具備以下四個必要條件。

1)互斥條件:指程序對所分配到的資源進行排它性使用,即在一段時間內,這一資源只由這乙個程序占用。如果此時還有其它程序請求該資源,則請求者只能等待,直至占有該資源的程序用畢釋放。

2)請求和保持條件:指程序已經保持至少乙個資源,但又提出了新的資源請求,而該資源已被其它程序占有,此時請求該資源,那麼程序被阻塞,但程序又對自己當前已獲得的其它資源保持不放。

3)不可剝奪條件:指程序已獲得的資源,在未使用完之前,不能被其他程序所剝奪,只能在使用完時,由自己釋放。

4)環路等待條件:指在發生死鎖時,必然存在乙個環形鏈,即程序集合中的p0正在等待乙個p1占用的資源;p1正在等待p2占用的資源,……,pn正在等待已被p0占用的資源。

在系統中已經出現死鎖後,應該及時檢測到死鎖的發生,並採取適當的措施來解除死鎖。目前處理死鎖的方法可歸結為以下四種:

1) 預防死鎖。

這是一種較簡單和直觀的事先預防法。方法是通過設定某些限制條件,去破壞產生死鎖的四個必要條件中的乙個或者幾個,來預防死鎖發生。

2) 避免死鎖。

該方法同樣是屬於事先預防的策略,但它並不是去破壞產生死鎖的的四個必要條件,而是在資源的動態分配過程中,用某種方法去防止系統進入不安全狀態,從而避免發生死鎖。

3)檢測死鎖。

允許死鎖的發生,但是通過系統的檢測之後,採取一些措施,將死鎖清除掉。

4)解除死鎖。

該方法與檢測死鎖配合使用。當檢測到系統中已發生死鎖時,需要將程序從死鎖狀態中解脫出來。常用的實施方法是撤銷或掛起一些程序,以便**一些資源,再將這些資源分配給已處於阻塞狀態的程序,使之轉為就緒狀態,以便繼續執行。

什麼是死鎖?其條件是什麼?怎樣避免死鎖?

死鎖的概念 在兩個或多個併發程序中,如果每個程序持有某種資源而又都等待別的程序釋放它或它們現在保持著的資源,在未改變這種狀態之前都不能向前推進,稱這一組程序產生了死鎖 通俗地講,就是兩個或多個程序被無限期地阻塞 相互等待的一種狀態 死鎖產生的原因主要是 1.系統資源不足 2.程序推進順序非法 產生死...

什麼是死鎖?其條件是什麼?怎樣避免死鎖?

死鎖的概念 在兩個或多個併發程序中,如果每個程序持有某種資源而又都等待別的程序釋放它或它們現在保持著的資源,在未改變這種狀態之前都不能向前推進,稱這一組程序產生了死鎖 通俗地講,就是兩個或多個程序被無限期地阻塞 相互等待的一種狀態 死鎖產生的原因主要是 1.系統資源不足 2.程序推進順序非法 產生死...

什麼是死鎖?如何避免死鎖?

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