如兩個程序分別等待對方占有的資源,於是兩個程序都不能執行而處於等待狀態,此執行緒稱為死鎖。
程序的三態模型
就緒態 ↔
\leftrightarrow
↔ 執行態 →
\to→ 等待態 →
\to→ 就緒態
程序的五態模型
建立程序 →
\to→ 就緒態 ↔
\leftrightarrow
↔ 執行態 →
\to→ 等待態 →
\to→ 就緒態 (執行態 →
\to→ 結束程序)
程序的七態模型
新增 掛起就緒態 和 掛起等待態。
程序建立後可能是就緒態,也可能是掛起就緒態。
死鎖的四個條件
(1)互斥條件
(2)占有和等待
(3)不可剝奪
(4)迴圈等待
前三個條件是必要條件,但不是充分條件。第四個條件是前三個條件共同作用的結果,不會單獨存在。
死鎖防止
破壞(1):使得臨界資源可同時訪問。
破壞(2):靜態分配。在程式執行前就將所需的全部資源都分配。
破壞(3):剝奪排程。
破壞(4):層次分配,有序分配。
死鎖防止會降低系統的併發度,導致低效的資源利用率。
死鎖避免
銀行家演算法
它允許死鎖的前三個條件存在,但是可以通過演算法避免迴圈等待。
死鎖的恢復和檢測
mysql產生死鎖 MySQL會發生死鎖嗎?
mysql的innodb引擎事務有4種隔離級別,主要是為了保證資料的一致性。innodb引擎提供了行級鎖,表鎖。myisam提供了表鎖,如題,mysql會發生死鎖嗎?答會,在innodb引擎下,rr repeatable read 級別,如果多個事務爭搶同乙個資源,會發生死鎖。在rr級別下,mysq...
是什麼情況造成死鎖
include include include int pthread create pthread t restrict tidp,const pthread attr t restrict attr,void start rtn void void restrict arg int g data...
發生死鎖的情況以及解決的辦法
首先,死鎖是指兩個或多個執行緒,彼此間持有對方所需資源,使得每乙個執行緒都處在等待的狀態。發生死鎖通常要滿足以下四個條件 1 互斥條件 乙個資源只能同時被一條執行緒占用。2 請求和保持條件 當乙個執行緒因獲取不到其他資源而阻塞時,對自己所持有的資源保持不放。3 不剝奪條件 除非執行緒自己釋放資源,否...