死鎖和活鎖

2021-07-15 04:39:21 字數 1790 閱讀 7115

死鎖

:是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象。

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

1)互斥條件:指程序對所分配到的資源進行排它性使用,即在

一段時間內某資源只由乙個程序占用。

如果此時還有其它程序請求資源,則請求者只能等待,直至占有資源的程序用畢釋放。

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

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

4)環路等待條件:指在發生死鎖時,必然存在乙個程序——資源的環形鏈,

即程序集合中的p0正在等待乙個p1占用的資源;p1正在等待p2占用的資源,……,pn正在等待已被p0占用的資源。

對資源的分配要給予合理的規劃。

有序資源分配法

這種演算法資源按某種規則系統中的所有資源統一編號(例如印表機為1、磁帶機為2、磁碟為3、等等),申請時必須以上公升的次序。系統要求申請程序:

1、對它所必須使用的而且屬於同一類的所有資源,必須一次申請完;

2、在申請不同類資源時,必須按各類裝置的編號依次申請。例如:程序pa,使用資源的順序是r1,r2; 程序pb,使用資源的順序是r2,r1;若採用動態分配有可能形成環路條件,造成死鎖。

採用有序資源分配法:r1的編號為1,r2的編號為2;

pa:申請次序應是:r1,r2

pb:申請次序應是:r1,r2

這樣就破壞了環路條件,避免了死鎖的發生

銀行演算法

避免死鎖演算法中最有代表性的演算法是dijkstra e.w 於2023年提出的銀行家演算法:

該演算法需要檢查申請者對資源的最大需求量,如果系統現存的各類資源可以滿足申請者的請求,就滿足申請者的請求。

這樣申請者就可很快完成其計算,然後釋放它占用的資源,從而保證了系統中的所有程序都能完成,所以可避免死鎖的發生。

活鎖(一種特殊的飢餓) (

活鎖指的是任務或者執行者沒有被阻塞,由於某些條件沒有滿足,導致一直重複嘗試,失敗,嘗試,失敗。

活鎖和死鎖的區別在於,處於活鎖的實體是在不斷的改變狀態,所謂的"活", 而處於死鎖的實體表現為等待;活鎖有可能自行解開,死鎖則不能。

活鎖可以認為是一種特殊的飢餓。 下面這個例子在有的文章裡面認為是活鎖。實際上這只是一種飢餓。因為沒有體現出"活"的特點。 假設事務t2再不斷的重複嘗試獲取鎖r,那麼這個就是活鎖。

如果事務t1封鎖了資料r,事務t2又請求封鎖r,於是t2等待。t3也請求封鎖r,當t1釋放了r上的封鎖後,系統首先批准了t3的請求,t2仍然等待。然後t4又請求封鎖r,當t3釋放了r上的封鎖之後,系統又批准了t4的請求......t2可能永遠等待。

活鎖應該是一系列程序在輪詢地等待某個不可能為真的條件為真。活鎖的時候程序是不會blocked,這會導致耗盡cpu資源。

)所謂飢餓,

是指如果事務t1封鎖了資料r,事務t2又請求封鎖r,於是t2等待。t3也請求封鎖r,當t1釋放了r上的封鎖後,系統首先批准了t3的請求,t2仍然等待。然後t4又請求封鎖r,當t3釋放了r上的封鎖之後,系統又批准了t4的請求......t2可能永遠等待,這就是飢餓。

活鎖有一定機率解開。而死鎖(deadlock)是無法解開的。

避免活鎖的簡單方法是採用先來先服務的策略。

當多個事務請求封鎖同一資料物件時,封鎖子系統按請求封鎖的先後次序對事務排隊,資料物件上的鎖一旦釋放就批准申請佇列中第乙個事務獲得鎖。

死鎖與活鎖

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

死鎖 活鎖 飢餓

1.活鎖指的是任務或者執行者沒有被阻塞,由於某些條件沒有滿足,導致一直重複嘗試,失敗,嘗試,失敗。2.活鎖和死鎖的區別在於,處於活鎖的實體是在不斷的改變狀態,所謂的 活 而處於死鎖的實體表現為等待 活鎖有可能自行解開,死鎖則不能。3.活鎖可以認為是一種特殊的飢餓。下面這個例子在有的文章裡面認為是活鎖...

死鎖 活鎖 飢餓

活鎖飢餓 是指兩個或兩個以上的程序 或執行緒 在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。診斷要通過迴圈圖法 耗時法來判斷。通過犧牲代價最小的事務來解除死鎖。例如撤銷或掛起一些程序,以便 一些資源,再將這些資源分配給已處於阻塞狀態的程序,使之轉為就緒狀態,...