死鎖以及避免死鎖

2021-09-25 15:31:48 字數 1088 閱讀 1275

目錄

一 什麼是死鎖

二 產生死鎖的四個必要條件

三 避免死鎖的方法

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

1. 互斥

某種資源一次只允許乙個程序訪問,即該資源一旦分配給某個程序,其他程序就不能再訪問,直到該程序訪問結束。

2. 占有且等待

乙個程序本身占有資源(一種或多種),同時還有資源未得到滿足,正在等待其他程序釋放該資源。

3. 不可搶占

別人已經占有了某項資源,你不能因為自己也需要該資源,就去把別人的資源搶過來。

4. 迴圈等待

存在乙個程序鏈,使得每個程序都占有下乙個程序所需的至少一種資源。

產生死鎖需要四個條件,那麼,只要這四個條件中至少有乙個條件得不到滿足,就不可能發生死鎖了。由於互斥條件是非共享資源所必須的,不僅不能改變,還應加以保證,所以,主要是破壞產生死鎖的其他三個條件。

1. 破壞「占有且等待」條件

優點:簡單易實施且安全。

缺點:因為某項資源不滿足,程序無法啟動,而其他已經滿足了的資源也不會得到利用,嚴重降低了資源的利用率,造成資源浪費。使程序經常發生飢餓現象。

2. 破壞「不可搶占」條件

當乙個已經持有了一些資源的程序在提出新的資源請求沒有得到滿足時,它必須釋放已經保持的所有資源,待以後需要使用的時候再重新申請。這就意味著程序已占有的資源會被短暫地釋放或者說是被搶占了。

該種方法實現起來比較複雜,且代價也比較大。釋放已經保持的資源很有可能會導致程序之前的工作實效等,反覆的申請和釋放資源會導致程序的執行被無限的推遲,這不僅會延長程序的周轉週期,還會影響系統的吞吐量。

3. 破壞「迴圈等待」條件

破壞這個條件,需要對資源進行排序,然後按序申請資源。

死鎖發生的條件以及如何避免死鎖

死鎖 死鎖,它是作業系統或軟體執行的一種狀態 在多工下,當乙個或多個程序等待系統資源而資源又被系統本身 或其它程序占用時,就形成了死鎖。死鎖發生的最常見形式是兩個或多個執行緒等待被另乙個執行緒占用的資源 如果兩個順序同時發生,執行緒1將永遠無法獲得鎖b,因為鎖b被執行緒2占有。同時執行緒2也永遠無法...

Linux 什麼是死鎖以及如何避免死鎖

介紹死鎖之前,先來說一下作業系統中的資源分類 按照使用次數分類 1 可重用性資源 每乙個可重用資源中的單元只能分配給乙個程序使用,不允許多個執行緒共享。程序使用資源順序 1 請求資源,如果請求失敗程序阻塞或迴圈等待 2 使用資源 3 釋放資源。系統中的可重用資源數目都是相對固定的程式執行時不能增加或...

什麼是死鎖?如何避免死鎖? 以及實現執行緒死鎖才程式

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