【操作系统】死锁
死鎖
開發多線程應用的程序必須特別關注死鎖問題,因為多個線程可能因為競爭共享資源而容易產生死鎖。
當一組進程內的每個進程都在等待一個事件,而這個事件只能由這一組進程的另一個進程引起,那么這組進程就處于死鎖狀態。
這里關注的主要事件是資源的獲取和釋放。
資源可以是物理資源(打印機、磁帶驅動器、內存空間、CPU周期等)或邏輯資源(信號量、互斥鎖、文件等)。
IPC等也可能導致死鎖。
死鎖未必僅局限于同一種資源,可能涉及不同的資源類型。
多線程應用的開發人員必須始終警惕可能發生的死鎖。在使用加鎖工具以避免競爭條件時,要特別注意如何獲得和釋放鎖,否則就可能會死鎖。
死鎖的特征
發生死鎖時,進程永遠不能完成,系統資源被阻礙使用,以至于阻止了其他作業的開始執行。
如果在一個系統中下面四個條件同時滿足,那么會引起死鎖:
- 互斥:至少有一個資源必須處于非共享模式,即一次只有一個進程使用。如果另一資源申請該資源,那么申請進程必須延遲直到該資源釋放為止。
- 占有并等待:一個進程必須占有至少一個資源,并等待另一資源,而該資源被其他進程所占有。
- 非搶占:資源不能被搶占,即只在進程完成其任務之后,才會釋放其資源。
- 循環等待:有一組進程
總結
- 上一篇: 《大数据》2015年第3期“研究”——社
- 下一篇: OpenGL从入门到精通--你好三角形