網(wǎng)站開發(fā) 定制 合同優(yōu)化大師使用方法
面試題:什么是死鎖?如何避免死鎖?
我的回答:
死鎖是兩個(gè)或者多個(gè)進(jìn)程都占有各自的資源,然后都互相請(qǐng)求資源,導(dǎo)致互相都陷入了阻塞狀態(tài)。
如何避免死鎖呢?
首先,造成死鎖有四個(gè)必要條件:
1.互斥條件
當(dāng)一個(gè)進(jìn)程占用某個(gè)資源的時(shí)候,其他進(jìn)程是不可能再占用這個(gè)資源的。
2.不可剝奪條件
當(dāng)一個(gè)進(jìn)程占用某個(gè)資源時(shí),無法直接剝奪他占用的資源,只能由其主動(dòng)釋放。
3.請(qǐng)求保持條件
當(dāng)一個(gè)進(jìn)程占用部分資源,然后又請(qǐng)求某些資源時(shí),會(huì)占用已有資源,然后進(jìn)入阻塞狀態(tài)等待。
4.環(huán)路等待條件
多個(gè)進(jìn)程形成一個(gè)循環(huán)等待的鏈條,每個(gè)進(jìn)程都在等待下一個(gè)進(jìn)程釋放其所占用的資源。
要想避免死鎖,就要打破造成死鎖的這四個(gè)必要條件之一即可:
1.打破不可剝奪條件
設(shè)置請(qǐng)求倒計(jì)時(shí),當(dāng)一個(gè)進(jìn)程請(qǐng)求一個(gè)資源,超過這個(gè)倒計(jì)時(shí),會(huì)強(qiáng)制回收其所占用的資源,讓其終止或者重新申請(qǐng)。
2.打破請(qǐng)求保持條件
一次性分配所有的資源給進(jìn)程,避免占用部分資源,再去申請(qǐng)其他資源,造成循環(huán)等待。
3.打破環(huán)路等待條件
讓多個(gè)進(jìn)程按順序申請(qǐng)資源,然后反序釋放資源。
其他一些避免死鎖的策略有:
1.資源分配圖
通過資源分配圖來檢測(cè)死鎖是否存在
2.死鎖檢測(cè)與恢復(fù)
完全避免死鎖幾乎不可能,而且代價(jià)太大,所以可以對(duì)死鎖現(xiàn)象進(jìn)行檢測(cè),檢測(cè)到了,再采取必要的恢復(fù)策略。如:終止某些進(jìn)程或回滾操作。