死鎖:
① 互斥條件:指進程對所分配到的資源進行排它性使用,在一段時間內(nèi)某資源只由一個進程占用,如果此時還有其他進程請求資源,則請求者只能等待,直至占有資源的進程被釋放。
② 請求和保持條件:指進程已經(jīng)保持至少一個資源,但又提出了新的資源請求,而該資源已被其它進程占有,此時請求進程阻塞,但又對自己已獲得的其它資源保持不放。
③ 不剝奪條件:指進程已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。
④環(huán)路等待條件:在發(fā)生死鎖時,必然存在一個進程,資源的喚醒鏈,即進程集合 {P0,P1,P2,???,Pn} 中的 P0 正在等待一個 P1 占用的資源;P1 正在等待 P2 占用的資源,……,Pn 正在等待已被 P0 占用的資源。
解釋:
線程 A 或者 B 需要過獨木橋 (使用該進程), 而 C 還沒有走完 (進程還在占用), 于是三方僵死。
也可以是沒有 C 的情況下,A 和 B 互不禮讓僵死。
A 和 B 都認(rèn)為自己優(yōu)先級較高應(yīng)該使用該進程。
活鎖:
活鎖指的是任務(wù)或執(zhí)行者沒有被阻塞,由于某些條件沒有滿足,導(dǎo)致一直重復(fù)嘗試,失敗?;铈i和死鎖的區(qū)別在于,處于活鎖的實體在不斷的改變狀態(tài),而處于死鎖的實體表現(xiàn)為等待,活鎖有可能自行解開,死鎖則不能。
解釋:線程 A 和 B 都需要過橋 (都需要使用進程), 而都禮讓不走 (那到的系統(tǒng)優(yōu)先級相同,都認(rèn)為不是自己優(yōu)先級高), 就這么僵持下去。
餓死:
指一個可運行的進行盡管能繼續(xù)執(zhí)行,但被調(diào)度器無限期的忽視,而不能被調(diào)度執(zhí)行的情況,餓死可以根據(jù)先來先服務(wù)資源分配策略來避免。
解釋:
這是個獨木橋 (單進程), 橋上只能走一個人,B 來到時 A 在橋上,B 等待;
而此時比 B 年齡小的 C 來了,B 讓 C 先行 (A 走完后系統(tǒng)把進程分給了 C),
C 上橋后,D 又來了,B 又讓 D 先行 (C 走完后系統(tǒng)把進程分個了 D)
以此類推 B 一直是等待狀態(tài)。
阻塞:
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.