【操作系统】死锁
死鎖
開(kāi)發(fā)多線程應(yīng)用的程序必須特別關(guān)注死鎖問(wèn)題,因?yàn)槎鄠€(gè)線程可能因?yàn)楦?jìng)爭(zhēng)共享資源而容易產(chǎn)生死鎖。
當(dāng)一組進(jìn)程內(nèi)的每個(gè)進(jìn)程都在等待一個(gè)事件,而這個(gè)事件只能由這一組進(jìn)程的另一個(gè)進(jìn)程引起,那么這組進(jìn)程就處于死鎖狀態(tài)。
這里關(guān)注的主要事件是資源的獲取和釋放。
資源可以是物理資源(打印機(jī)、磁帶驅(qū)動(dòng)器、內(nèi)存空間、CPU周期等)或邏輯資源(信號(hào)量、互斥鎖、文件等)。
IPC等也可能導(dǎo)致死鎖。
死鎖未必僅局限于同一種資源,可能涉及不同的資源類型。
多線程應(yīng)用的開(kāi)發(fā)人員必須始終警惕可能發(fā)生的死鎖。在使用加鎖工具以避免競(jìng)爭(zhēng)條件時(shí),要特別注意如何獲得和釋放鎖,否則就可能會(huì)死鎖。
死鎖的特征
發(fā)生死鎖時(shí),進(jìn)程永遠(yuǎn)不能完成,系統(tǒng)資源被阻礙使用,以至于阻止了其他作業(yè)的開(kāi)始執(zhí)行。
如果在一個(gè)系統(tǒng)中下面四個(gè)條件同時(shí)滿足,那么會(huì)引起死鎖:
- 互斥:至少有一個(gè)資源必須處于非共享模式,即一次只有一個(gè)進(jìn)程使用。如果另一資源申請(qǐng)?jiān)撡Y源,那么申請(qǐng)進(jìn)程必須延遲直到該資源釋放為止。
- 占有并等待:一個(gè)進(jìn)程必須占有至少一個(gè)資源,并等待另一資源,而該資源被其他進(jìn)程所占有。
- 非搶占:資源不能被搶占,即只在進(jìn)程完成其任務(wù)之后,才會(huì)釋放其資源。
- 循環(huán)等待:有一組進(jìn)程
總結(jié)
- 上一篇: 《大数据》2015年第3期“研究”——社
- 下一篇: 数据库系统实训——实验三——子查询与组合