一、死鎖的定義
死鎖是一種由於多個進程競爭資源而陷入的一種僵局,若無外力作用,所有進程都將無法向前推進。
二、死鎖的產生原因
- 競爭資源
- 進程間推進順序非法
三、死鎖的四個必要條件
- 互斥條件
- 不可剝奪條件
- 保持並請求條件
- 環路等待條件
四、如何避免死鎖
- 按同一順序訪問對象 (避免出現循環)
- 避免事務中的用戶交互 (減少持有資源的時間,較少鎖競爭)
- 保持事務簡短並處於一個批處理中 (減少持有資源的時間)
- 使用較低的隔離級別 (使用較低的隔離級別(例如已提交讀)比使用較高的隔離級別(例如可序列化)持有共享鎖的時間更短,減少鎖競爭)
- 使用基於行版本控制的隔離級別
銀行家算法是一個避免死鎖的著名算法:
當一個進程申請使用資源的時候,銀行家算法通過【先 試探 分配給該進程資源】,然後【通過安全性算法判斷分配後的系統是否處於安全狀態】,若不安全則試探分配作廢,讓該進程繼續等待。