資源簡介
銀行家算法是一個避免死鎖的著名算法,它以銀行借貸系統的分配策略為基礎,判斷并保證系統的安全運行。
代碼片段和文件信息
#include??
#include??
#include
using?namespace?std;??
#define?MAX_PROCESS?100??
#define?MAX_RESOURCE?100??
int?Available[MAX_RESOURCE];????????????????????//可用資源數組????
int?Max[MAX_PROCESS][MAX_RESOURCE];????????????//最大需求矩陣????
int?Allocation[MAX_PROCESS][MAX_RESOURCE];????//分配矩陣???
int?Need[MAX_PROCESS][MAX_RESOURCE];?????//需求矩陣????
int?Request[MAX_PROCESS][MAX_RESOURCE];????????//進程需要資源數???
int?p[MAX_PROCESS];?????????????????????????????//記錄序列??
int?nm;????????????????????????????????????//n個進程m個資源????
void?Init()????????????????//初始化算法????
{????
????int?ij;????
????printf(“請輸入進程的數目:\n“);??
????scanf(“%d“&n);???
????printf(“請輸入資源的種類:\n“);???
????scanf(“%d“&m);??
????printf(“請輸入每個進程最多所需的各資源數按照%dx%d矩陣從左到右、從上到下輸入:\n“nm);????
????for(i=0;i ????{??
????????for(j=0;j ????????{??
????????????scanf(“%d“&Max[i][j]);??
????????}??
????}??
????printf(“請輸入每個進程已分配的各資源數也按照%dx%d矩陣從左到右、從上到下輸入:\n“nm);????
????for(i=0;i ????{????
????????for(j=0;j ????????{????
????????????scanf(“%d“&Allocation[i][j]);???
????????????Need[i][j]=Max[i][j]-Allocation[i][j];???
????????????if(Need[i][j]<0)????
????????????{????
????????????????printf(“您輸入的第%d個進程所擁有的第%d個資源數錯誤請重新輸入:\n“i+1j+1);????
????????????????j--;????
????????????????continue;????
????????????}????
????????}????
????}????
????printf(“請輸入各個資源現有的數目:\n“);????
????for(i=0;i ????{????
????????scanf(“%d“&Available[i]);??
????}??????
}????
bool?Safe()????//安全性算法??
{????
????int?ijkl=0;????
????int?Work[MAX_RESOURCE];?//工作數組他表示系統可提供給進程繼續運行所需的各類資源數目????
????int?Finish[MAX_PROCESS];??//系統是否有足夠的資源分配給進程,使之運行完成???
????for(i=0;i ????{??
????????Work[i]=Available[i];??
????}????
????//Finish每個進程是否安全??
???
????memset(Finish0sizeof(Finish));???
????for(i=0;i ????{??????
???????if(Finish[i])?continue;??
????????for(j=0;j ????????{??
????????????//第i個進程需要的第j個資源數?>?系統現有的第j個資源數???
????????????if(Need[i][j]>Work[j])?break;??
????????}??
????????if(j==m)//如果第i個進程所需的各個資源數都沒有超過系統現有的對應資源數????
????????{?????
????????????Finish[i]=1;//給該進程的FINISH標記為true????
????????????for(k=0;k ????????????{????
????????????????Work[k]+=Allocation[i][k];//將Work賦值為?第i個進程各個已分配資源數+系統現有的對應資源數(因為當改進程全部資源數都滿足時線程
- 上一篇:C語言庫函數源碼大全
- 下一篇:C++ 停車場管理 數據結構 課程設計
評論
共有 條評論