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

2021-07-29 19:21:44 字數 2046 閱讀 6745

ⅰ死鎖

¤死鎖,它是作業系統或軟體執行的一種狀態:在多工下,當乙個或多個程序等待系統資源而資源又被系統本身             或其它程序占用時,就形成了死鎖。

死鎖發生的最常見形式是兩個或多個執行緒等待被另乙個執行緒占用的資源:

如果兩個順序同時發生,執行緒1將永遠無法獲得鎖b,因為鎖b被執行緒2占有。同時執行緒2也永遠無法獲得鎖a,因             為鎖a被執行緒1擁有。

ⅱ死鎖產生的條件

¤死鎖的發生必須具備以下四個條件:

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

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

③不剝奪條件:指程序已獲得的資源,在使用結束之前,不能被剝奪,只能在使用結束之後自己釋放。

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

ⅲ如何避免和處理死鎖

¤預防死鎖:預防死鎖的方法是使四個條件中的第

二、三、四個條件之一不能成立,來避免發生死鎖。

①加鎖順序:按同一順序加鎖。

當多個程序需要相同的多個鎖,又按照不同的順序加鎖時,就很容易發生死鎖。

如果能保證所有的程序都按照相同的順序獲得鎖,那麼死鎖就不會產生。

也就是說如果申請鎖時超過了這個時限,該程序就放棄對該鎖的請求,並釋放所有已經獲得的鎖。然後過一                    段隨機的時間後重試。

這段隨機的時間讓其它執行緒有機會嘗試獲取相同的鎖,並且讓該應用在沒有獲得鎖的時候繼續進行。

問題是,如果有非常多的程序同一時間去競爭同一批資源,即使有超時和回退機制,還是可能會存在某些進                    程反覆嘗試卻始終得不到鎖的問題。

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

¤死鎖檢測:它主要針對那些無法實現按序加鎖並且加鎖時限也不可行的情況。

通過設定的檢測機構,及時地檢測出死鎖的發生,並精確地確定與死鎖有關的程序和資源。然後採取適當措施從            系統中將已發生的死鎖清除掉。

每當乙個程序獲得了鎖,會在程序和鎖的相關資料結構中將其記下。並且,每當有程序請求鎖,都會記錄在這個            資料結構中。當乙個程序請求鎖失敗時,該執行緒可以遍歷程序和鎖的資料結構確認是否發生死鎖。

例如,程序a請求鎖2,但鎖2倍程序b占有,於是程序a等待程序b。同理,程序b等待程序c,程序c等待程序                 d,程序d等待程序a。程序a為了檢測死鎖,它需要遞進地檢測所有被b請求的鎖。從程序b請求的所開                       始,程序a找到了程序c,然後找到了程序d。發現程序d請求的鎖被程序a自己所占有,這樣檢測到發生了                     死鎖。如下圖所示:

當程序a檢測到發生死鎖之後,乙個可行的方法是程序a釋放自己占有的鎖,回退,然後經過一段隨機的時間後重           試。這和加鎖時限相似,不同是死鎖已經發生了。

¤死鎖解除:這是與檢測死鎖相配套的一種措施。當發現有程序死鎖時,應立即把它們從死鎖狀態中解脫出來。

一種方法是,剝奪資源。從其它程序剝奪足夠數量的資源給死鎖程序,以解除死鎖狀態。

還有一種方法是,撤銷程序。最簡單的撤銷程序的方法是使全部死鎖程序都夭折掉;稍微溫和一點的方法是按照             某種順序逐個地撤銷程序,這只有足夠的資源可用。

死鎖以及避免死鎖

目錄 一 什麼是死鎖 二 產生死鎖的四個必要條件 三 避免死鎖的方法 是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。1.互斥 某種資源一次只允...

死鎖發生的條件

作業系統中關於競爭和死鎖的關係下面描述正確的是?競爭一定會導致死鎖 死鎖一定由競爭引起 競爭可能引起死鎖 預防死鎖可以防止競爭 產生死鎖的原因主要是 1 因為系統資源不足。2 程序執行推進的順序不合適。3 資源分配不當等。如果系統資源充足,程序的資源請求都能夠得到滿足,死鎖出現的可能性就很低,否則 ...

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

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