死鎖,活鎖,餓死的區別


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

飢餓:考慮一台打印機分配的例子,當有多個進程需要打印文件時,系統 按照短文件優先的策略排序,該策略具有平均等待時間短的優點,似乎非常合 理,但當短文件打印任務源源不斷時,長文件的打印任務將被無限期地推遲, 導致飢餓以至餓 死。

活鎖:與飢餓相關的另外一個概念稱為活鎖 ,在忙式等待條件下發生的飢 餓,稱為活鎖。

不進入等待狀態的等待稱為忙式等待。另一種等待方式是阻塞式等待,進 程得不到共享資源時將進入阻塞狀態,讓出 CPU 給其他進程使用。忙等待和阻 塞式等待的相同之處在於進程都不具備繼續向前推進的條件,不同之處在於處於忙等待的進程不主動放棄 CPU ,盡管 CPU 可能被剝奪,因而是低效的;而 處於阻塞狀態的進程主動放棄 CPU ,因而是高效的。

活鎖的例子:如果事務 T1 封鎖了數據 R,事務 T2 又請求封鎖 R,於是 T2 等待。T3 也請求封鎖 R,當 T1 釋放了 R 上的封鎖后,系統首先批准了 T3 的 請求,T2 仍然等待。然后 T4 又請求封鎖 R,當 T3 釋放了 R 上的封鎖之后, 系統又批准了 T4 的請求......T2 可能永遠等待(在整個過程中,事務 T2 在不 斷的重復嘗試獲取鎖 R)。

活鎖的時候,進程是不會阻塞的,這會導致耗盡 CPU 資源,這是與死鎖最 明顯的區別。 活鎖指的是任務或者執行者沒有被阻塞,由於某些條件沒有滿足,導致一 直重復嘗試,失敗,嘗試,失敗。 活鎖和死鎖的區別在於,處於活鎖的實體是 在不斷的改變狀態,所謂的“活”, 而處於死鎖的實體表現為等待;活鎖有一定 幾率解開,而死鎖是無法解開的。

避免活鎖的簡單方法是采用先來先服務的策略。當多個事務請求封鎖同一 數據對象時,封鎖子系統按請求封鎖的先后次序對事務排隊,數據對象上的鎖 一旦釋放就批准申請隊列中第一個事務獲得鎖
————————————————
版權聲明:本文為CSDN博主「qq_43193797」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_43193797/article/details/89082700


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM