引言
計算機的某些資源同一時間只能乙個程序或執行緒使用,比如印表機,如果兩個程序同時使用印表機便會出問題。所以需要使用鎖來控制程序併發的使用某些資源,但是不恰當的使用鎖會造成乙個嚴重的問題。舉個例子,程序a申請掃瞄器,a獲得掃瞄器;程序b申請燒錄儀,b獲得燒錄儀,此時程序a需要申請燒錄儀,而程序b要申請掃瞄器,因為程序a、b都需要有掃瞄器和燒錄儀才能完成工作,因此這個過程將一直等待下去,這就叫做死鎖。
死鎖可以發生在各種各樣的場景,比如資料庫,接下來學習死鎖的發生和死鎖的檢查以及死鎖的避免和解決
資源大部分的死鎖都和資源有關,先來了解一下資源
資源定義
根據時間推移,能夠獲得、使用、釋放的任何東西
可搶占資源和不可搶占資源
死鎖檢測和恢復
死鎖的條件
死鎖建模
舉個例子:假設有三個程序a、b、c申請三個資源r、s、t,如下圖
死鎖處策略
死鎖檢測
不防止死鎖的發生,而是通過死鎖檢測的方式解決死鎖
各型別多個資源的死鎖檢測
死鎖恢復
死鎖避免
上邊討論了死鎖的檢測和恢復,其沒有考慮避免死鎖發生,而是從檢測和解決死鎖考慮。是否能有方法每次資源分配時做出正確的選擇避免死鎖?接下來講述如果避免死鎖發生
資源軌跡圖
安全和不安全狀態
單資源銀行家演算法
多資源銀行家演算法
死鎖預防
通過上述的死鎖避免方法學習,我們知道了死鎖避免從本質上是不可行的。所以回到文章開始提到的四個死鎖條件,可以從這四個條件入手,通過打破這些條件來預防死鎖
破壞互斥條件
破壞持有並等待條件
破壞不可搶占條件
破壞環路等待條件
其他問題
兩階段鎖
資料庫領域適用的一種加鎖方式,在第一階段,程序對某一記錄加鎖,如果第一階段加鎖成功,那就執行第二階段更新操作,然後釋放鎖。如果程序發現需要加鎖的記錄已經加鎖,釋放它已經獲得的鎖重新開始第一階段
該演算法並不能通用,只有在程式設計師確定在第一階段隨時都可以停下來,然後重啟並且不產生錯誤,該演算法才可用活鎖
飢餓
作業系統死鎖
作業系統死鎖,在作業系統課程當中屬於比較關注的乙個知識點,在這裡做個簡單的梳理。死鎖的四個必要條件 作業系統中有若干程序併發執行,它們不斷申請 使用 釋放系統資源,雖然系統的進 程協調 通訊機構會對它們進行控制,但也可能出現若干程序都相互等待對方釋放資源才能 繼續執行,否則就阻塞的情況。此時,若不借...
作業系統 死鎖
多執行緒以及多程序改善了系統資源的利用率並提高了系統 的處理能力。然而,併發執行也帶來了新的問題 死鎖。死鎖是指多個程序在執行過程中因爭奪資源而造成的一種僵局,當前程序處於這種狀態時,若無外力作用,它們都將無法再向前推進。關於死鎖的一些結論 競爭資源 當系統中供多個程序共享的資源如印表機 公用佇列等...
作業系統 死鎖
把需要排他性使用的物件稱為資源。資源可以是硬體也可以是軟體,比如印表機或者資料庫中的乙個加鎖記錄。資源可以分為兩類 可搶占資源和不可搶占資源。搶占這個詞,在程序和執行緒排程時就提到了這個概念,那時是程序或者執行緒可以搶占cpu,即搶占式排程。儲存器也可以搶占,如記憶體換頁。一般來說,可搶占資源不會引...