首先要定義一些結構體,為了符合課本描述,我只定義了乙個結構體:
typedef struct resource;
結構體裡面的三個域分別表示三種資源的數量。
根據課本例題上的資料初始化三個矩陣和乙個向量。
//最大需求矩陣
resource max[processes_number] = ,,
,,};//已分配資源數矩陣
resource allocation[processes_number] = ,,
,,};//需求矩陣
resource need[processes_number] = ,,
,,};//可用資源向量
resource **ailable = ;
為了能夠輸出安全狀態時的安全序列,還可以新增乙個記錄安全序列的陣列int safesequence[processed_number]。
因為銀行家演算法使用的是試探分配的策略,如果程序請求分配的資源既不大於自己尚需的資源,又不大於系統現存的資源,那就可以先試探著將資源分配給該程序,然後測試分配後是不是有可能造成死鎖,如果不會引起死鎖(即安全狀態)就可以完成分配,否則(即不安全狀態)就將試探分配的資源**回來讓其等待。那麼根據上面定義的資料就可以很容易的寫出試探分配和**資源的函式。
//試探分配
void probealloc(int process,resource *res)
//若試探分配後進入不安全狀態,將分配回滾
void rollback(int process,resource *res)
接下來就是安全性檢查函式了,在這個函式中還需要設定乙個work向量和乙個finish向量,函式實現主要就是通過乙個for迴圈檢查試探分配後系統的可用資源數是否能滿足所有程序的需求,若能滿足某乙個程序的需求,則假設分配其所需資源使之完成執行,然後就可以將資源**以分配給其它程序,如果依照這種方法所有的程序都可以成功執行,那麼現在的狀態就是安全狀態,否則即為不安全狀態,有可能引起死鎖。
bool safecheck()
;int i;
int j = 0;
for (i = 0; i < processes_number; i++)}}
//如果所有程序的finish向量都為true則處於安全狀態,否則為不安全狀態
for (i = 0; i < processes_number; i++)
}return true;
}有了以上三個函式就可以寫出請求分配資源的函式了。
//資源分配請求
bool request(int process,resource *res)
else
}else
}else
return false;
}給出乙個執行截圖。
上面囉嗦了一大堆,大概你也已經煩了,呵呵,**實在寫的醜,都不大好意思放了,不過有交流才有進步,如果有哪兒說不不正確,歡迎指正。
銀行家演算法,c 實現
在這個銀行家演算法裡面 1.程序有初始資源data1 2.程序有最大需求資源data2 3.系統有未分配資源idata 4.當程序需要的最大資源被滿足,資源會被立刻 5.程序數不會更新 本次的 僅滿足上面的要求 如果需要其他的要求,請適當修改 改進方面 1.可以修改未vector的陣列形式 2.如果...
C語言模擬銀行家演算法
銀行家演算法需求 乙個程式對資源的最大需求量不超過系統的最大資源 程式可以分多次申請資源,但是申請資源的總量不能超過最大需求量 當系統現有資源不能滿足程式的需求時,可以推遲分配資源,但是總能滿足程式對資源的需求 當程式獲得了全部的資源後,要在有限的時間內歸還資源 系統的安全 不安全狀態 在程式申請資...
銀行家演算法 C
銀行家演算法.cpp 定義控制台應用程式的入口點。include stdafx.h include using namespace std define m 5 程序數 define n 3 資源數 define false 0 define true 1 int ailable n 系統可用資源數...