死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。
有個故事是這樣的:面試官說:你說出什麼是死鎖我就給你offer,被面試的人說:你給我offer我就告訴你什麼是死鎖。
雖然程序在執行過程中,可能發生死鎖,但死鎖的發生也必須具備一定的條件,死鎖的發生必須具備以下四個必要條件。
1)互斥條件:指程序對所分配到的資源進行排它性使用,即在一段時間內某資源只由乙個程序占用。如果此時還有其它程序請求資源,則請求者只能等待,直至占有資源的程序用畢釋放。
2)請求和保持條件:指程序已經保持至少乙個資源,但又提出了新的資源請求,而該資源已被其它程序占有,此時請求程序阻塞,但又對自己已獲得的其它資源保持不放。
3)不剝奪條件:指程序已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。
4)環路等待條件:指在發生死鎖時,必然存在乙個程序——資源的環形鏈,即程序集合中的p0正在等待乙個p1占用的資源;p1正在等待p2占用的資源,……,pn正在等待已被p0占用的資源。
預防死鎖
破壞死鎖的四個必要條件中的乙個或多個來預防死鎖。
1,破壞請求和保持條件
所有程序開始前,必須一次性地申請所需的所有資源,這樣執行期間就不會再提出資源要求,破壞了請求條件,即使有一種資源不能滿足需求,也不會給它分配正在空閒的資源,這樣它就沒有資源,就破壞了保持條件,從而預防死鎖的發生。允許乙個程序只獲得初期的資源就開始執行,然後再把執行完的資源釋放出來。然後再請求新的資源。
2,破壞不可搶占條件
當乙個已經保持了某種不可搶占資源的程序,提出新資源請求不能被滿足時,它必須釋放已經保持的所有資源,以後需要時再重新申請。
3,破壞迴圈等待條件
對系統中的所有資源型別進行線性排序,然後規定每個程序必須按序列號遞增的順序請求資源。假如程序請求到了一些序列號較高的資源,然後有請求乙個序列較低的資源時,必須先釋放相同和更高序號的資源後才能申請低序號的資源。多個同類資源必須一起請求。
避免死鎖
和預防死鎖的區別就是,在資源動態分配過程中,用某種方式防止系統進入不安全的狀態。
檢測死鎖
執行時出現死鎖,能及時發現死鎖,把程式解脫出來
解除死鎖
發生死鎖後,解脫程序,通常撤銷程序,**資源,再分配給正處於阻塞狀態的程序。
死鎖的四個產生必要條件
php愛好者 死鎖 死鎖是指兩個或兩個以上的程序進在執行過程中,由於資源競爭或由於相互通訊而造成的一種阻塞式現象,如果沒有外力影響。那麼它們將永遠的持續下去,此事稱系統產生死鎖現象,這種永遠互相在等待的程序成為死鎖。死鎖的四個產生必要條件 1 互斥條件 程序對所分配到的資源具有排他性使用,一段時間內...
死鎖產生的的四個必要條件
某一種資源一次只允許乙個程序占有,也就是當資源被分配後,其他程序就無法訪問該資源,直到當前占有資源的程序訪問結束。乙個程序因請求某一資源而進入阻塞佇列而等待,沒有釋放本身程序就占有的資源。程序占有資源之後,在對該資源沒有使用完之前,不能強行剝奪。多個程序之間形成一種頭尾相接的迴圈等待資源關係。方法一...
死鎖的定義及產生死鎖的四個條件
答 死鎖的定義 是指多個程序迴圈等待它方占有的資源而無限期地僵持下去的局面。死鎖的產生的四個必備條件 1 互斥條件 某個資源同時只能有乙個程序占用 2 不可搶占條件 資源只能由佔有者程序自行釋放,不能被申請者程序搶占 3 占有且申請條件 程序至少已經占有乙個資源,但又申請新的資源 4 迴圈等待條件 ...