死鎖、活鎖、餓死和阻塞的我的理解

如下我的理解,請各位前輩多多指教:.net

死鎖:線程

① 互斥條件:指進程對所分配到的資源進行排它性使用,在一段時間內某資源只由一個進程佔用,若是此時還有其餘進程請求資源,則請求者只能等待,直至佔有資源的進程被釋放。3d

② 請求和保持條件:指進程已經保持至少一個資源,但又提出了新的資源請求,而該資源已被其它進程佔有,此時請求進程阻塞,但又對本身已得到的其它資源保持不放。blog

③ 不剝奪條件:指進程已得到的資源,在未使用完以前,不能被剝奪,只能在使用完時由本身釋放。進程

④環路等待條件:在發生死鎖時,必然存在一個進程,資源的喚醒鏈,即進程集合{P0,P1,P2,···,Pn}中的P0正在等待一個P1佔用的資源;P1正在等待P2佔用的資源,……,Pn正在等待已被P0佔用的資源。資源

解釋:get

線程A或者B須要過獨木橋(使用該進程),而C尚未走完(進程還在佔用),因而三方僵死;
也能夠是沒有C 的狀況下,A和B互不禮讓僵死.
A和B都認爲本身優先級較高應該使用該進程.請求

活鎖:im

活鎖指的是任務或執行者沒有被阻塞,因爲某些條件沒有知足,致使一直重複嘗試,失敗。活鎖和死鎖的區別在於,處於活鎖的實體在不斷的改變狀態,而處於死鎖的實體表現爲等待,活鎖有可能自行解開,死鎖則不能。img


解釋:線程A和B都須要過橋(都須要使用進程),而都禮讓不走(那到的系統優先級相同,都認爲不是本身優先級高),就這麼僵持下去.

餓死:

指一個可運行的進行儘管能繼續執行,但被調度器無限期的忽視,而不能被調度執行的狀況,餓死能夠根據先來先服務資源分配策略來避免。

解釋:

這是個獨木橋(單進程),橋上只能走一我的,B來到時A在橋上,B等待;
而此時比B年齡小的C來了,B讓C現行(A走完後系統把進程分給了C),
C上橋後,D又來了,B又讓D現行(C走完後系統把進程分個了D)
以此類推B一直是等待狀態.

阻塞:

不用解釋了吧?

 

江疏影講Java@目錄

相關文章
相關標籤/搜索