劍指offer_53 在排序陣列中查詢數字 I
阿新 • • 發佈:2022-04-10
死鎖是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種相互等待的現象,若無外力作用,它們都將無法推進下去。這是一個嚴重的問題,因為死鎖會讓你的程式掛起無法完成任務,死鎖的發生必須滿足以下四個條件:
- 互斥條件:一個資源每次只能被一個程序使用。 (ThreadLocal)
- 請求與保持條件:一個程序因請求資源而阻塞時,對已獲得的資源保持不放。(trylock過期)
- 不可剝奪條件:程序已獲得的資源,在末使用完之前,不能強行剝奪;(印表機)
- 迴圈等待條件:若干程序之間形成一種頭尾相接的迴圈等待資源關係;
銀行家演算法避免死鎖。
資料結構:
- 可利用資源向量Available:這是一個含有m個元素的陣列,其中的每一個元素代表一類可利用的資源數目,其初始值是系統中所配置的該類全部可用資源的數目,其數值隨該類資源的分配和回收而動態地改變。如果Available[j]=K,則表示系統中現有Rj類資源K個;
- 最大需求矩陣Max:這是一個n×m的矩陣,它定義了系統中n個程序中的每一個程序對m類資源的最大需求。如果Max[i, j]=K,則表示程序Pi需要Rj類資源的最大數目為K;
- 分配矩陣Allocation:這也是一個n×m的矩陣,它定義了系統中每一類資源當前已分配給每一程序的資源數。如果Allocation[i, j]=K,則表示程序Pi當前已分得Rj類資源的數目為K;
- 需求矩陣Need:這也是一個n×m的矩陣,用以表示每一個程序尚需的各類資源數。如果Need[i, j]=K,則表示程序Pi還需要Rj類資源K個,方能完成其任務。
避免死鎖最簡單的方法就是阻止迴圈等待條件,將系統中所有的資源設定標誌位,排序,規定所有的程序申請資源。