什麼情況會發生死鎖,死鎖的處理方法

2021-10-03 01:30:07 字數 843 閱讀 7659

如兩個程序分別等待對方占有的資源,於是兩個程序都不能執行而處於等待狀態,此執行緒稱為死鎖。

程序的三態模型

就緒態 ↔

\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 不剝奪條件 除非執行緒自己釋放資源,否...