死鎖 活鎖的理解

2021-08-29 15:49:22 字數 1280 閱讀 3756

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

比如:迎面開來的汽車a和汽車b過馬路,汽車a得到了半條路的資源(滿足死鎖發生條件1:資源訪問是排他性的,我佔了路你就不能上來,除非你爬我頭上去),汽車b佔了汽車a的另外半條路的資源,a想過去必須請求另一半被b占用的道路(死鎖發生條件2:必須整條車身的空間才能開過去,我已經佔了一半,尼瑪另一半的路被b占用了),b若想過去也必須等待a讓路,a是輛蘭博基尼,b是開奇瑞qq的屌絲,a素質比較低開窗對b狂罵:快給老子讓開,b很生氣,***的,老子就不讓(死鎖發生條件3:在未使用完資源前,不能被其他執行緒剝奪),於是兩者相互僵持乙個都走不了(死鎖發生條件4:環路等待條件),而且導致整條道上的後續車輛也走不了。(很粗魯的相互競爭)

2.活鎖:執行緒a和b都需要過橋(都需要使用程序),而都禮讓不走(那到的系統優先順序相同,都認為不是自己優先順序高),就這麼僵持下去.(很紳士,互相謙讓)

3.飢餓::這是個獨木橋(單程序),橋上只能走乙個人,b來到時a在橋上,b等待;

而此時比b年齡小的c來了,b讓c現行(a走完後系統把程序分給了c),

c上橋後,d又來了,b又讓d現行(c走完後系統把程序分個了d)

以此類推b一直是等待狀態.

4.產生死鎖的必要條件

(1)互斥使用(資源獨佔)

乙個資源每次只能給乙個程序使用(比如寫操作)

(2)占有且等待

程序在申請新的資源的同時,保持對原有資源的占有

(3)不可搶占

資源申請者不能強行從資源佔有者手中奪取資源,資源只能由佔有者自願釋放

(4)迴圈等待

p1等待p2占有的資源,p2等待p3的資源,...pn等待p1的資源,形成乙個程序等待迴路

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

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

6.飢餓,是指乙個可執行的程序儘管能繼續執行,但被排程器無限期地忽視,而不能被排程執行的情況。

飢餓是由資源分配策略決定的, 飢餓可以通過先來先服務等資源分配策略來避免。

死鎖與活鎖

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

死鎖和活鎖

死鎖 是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象。雖然程序在執行過程中,可能發生死鎖,但死鎖的發生也必須具備一定的條件,死鎖的發生必須具備以下四個必要條件。1 互斥條件 指程序對所分配到的資源進行排它性使用,即在 一段時間內某資源只由乙個程序占用。如果此時還有其它程序...

死鎖 活鎖 飢餓

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