原鏈接:http://f.dataguru.cn/thread-541686-1-1.html
以下個(gè)人理解,請(qǐng)各位前輩多多指教:死鎖:




死鎖:
1)互斥條件:指進(jìn)程對(duì)所分配到的資源進(jìn)行排它性使用,即在一段時(shí)間內(nèi)某資源只由一個(gè)進(jìn)程占用。如果此時(shí)還有其它進(jìn)程請(qǐng)求資源,則請(qǐng)求者只能等待,直至占有資源的進(jìn)程用畢釋放。
2)請(qǐng)求和保持條件:指進(jìn)程已經(jīng)保持至少一個(gè)資源,但又提出了新的資源請(qǐng)求,而該資源已被其它進(jìn)程占有,此時(shí)請(qǐng)求進(jìn)程阻塞,但又對(duì)自己已獲得的其它資源保持不放。
3)不剝奪條件:指進(jìn)程已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時(shí)由自己釋放。
4)環(huán)路等待條件:指在發(fā)生死鎖時(shí),必然存在一個(gè)進(jìn)程——資源的環(huán)形鏈,即進(jìn)程集合{P0,P1,P2,···,Pn}中的P0正在等待一個(gè)P1占用的資源;P1正在等待P2占用的資源,……,Pn正在等待已被P0占用的資源。
活鎖:
活鎖指的是任務(wù)或者執(zhí)行者沒(méi)有被阻塞,由于某些條件沒(méi)有滿足,導(dǎo)致一直重復(fù)嘗試,失敗,嘗試,失敗。 活鎖和死鎖
的區(qū)別在于,處于活鎖的實(shí)體是在不斷的改變狀態(tài),所謂的“活”, 而處于死鎖的實(shí)體表現(xiàn)為等待;活鎖有可能自行解開(kāi),死鎖則不能。
活鎖可以認(rèn)為是一種特殊的饑餓。 下面這個(gè)例子在有的文章里面認(rèn)為是活鎖。實(shí)際上這只是一種饑餓。因?yàn)闆](méi)有體現(xiàn)出“活”的特點(diǎn)。 假設(shè)事務(wù)T2再不斷的重復(fù)嘗試獲取鎖R,那么這個(gè)就是活鎖。
饑餓:
饑餓 ,與死鎖和活鎖非常相似。是指一個(gè)可運(yùn)行的進(jìn)程盡管能繼續(xù)執(zhí)行,但被調(diào)度器無(wú)限期地忽視,而不能被調(diào)度執(zhí)行的情況。[1] 饑餓可以通過(guò)先來(lái)先服務(wù)資源分配策略來(lái)避免。