银行家算法C++代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#include
#define False 0
#define True 1
int Max[100][100]={0};//各进程所需各类资源的最大需求
int Avaliable[100]={0};//系统可用资源
char name[100]={0};//资源的名称
int Allocation[100][100]={0};//系统已分配资源
int Need[100][100]={0};//还需要资源
int Request[100]={0};//请求资源向量
int temp[100]={0};//存放安全序列
int Work[100]={0};//存放系统可提供资源
int M;//作业的最大数
int N;//资源的最大数
int Sum[50]={0};
void init()
{ int i,j,flag;
char ming;
cout<<"请首先输入系统可供资源种类的数量:";
cin>>N;
for(i=0;i { cout<<"资源"< cin>>ming; name[i]=ming; cout<<"资源的数量:"; cin>>Sum[i]; } cout< cout<<"请输入作业的数量:"; cin>>M; cout<<"请输入各进程的最大需求量("< for(i=0;i for(j=0;j cin>>Max[i][j]; do{ flag=0; cout<<"请输入各进程已经申请的资源量("< for(i=0;i for(j=0;j { cin>>Allocation[i][j]; if(Allocation[i][j]>Max[i][j]) flag=1; Need[i][j]=Max[i][j]-Allocation[i][j]; } }while(flag); if(flag) cout<<"申请的资源大于最大需求量,请重新输入!\n"; for(j=0;j { for(i=0;i Sum[j]=Sum[j]-Allocation[i][j]; Avaliable[j]=Sum[j]; } cout<<"Avaliable的值:"< cout< } } void restore(int i) { int j; for(j=0;j { Avaliable[j]= Avaliable[j]+Request[j]; Allocation[i][j]=Allocation[i][j]-Request[j]; Need[i][j]=Need[i][j]+Request[j]; } } void showdata()//显示资源矩阵 { int i,j; cout<<" Max Allocation Need"< cout<<"进程名"; for(j=0;j<3;j++) { for(i=0;i cout< cout<<" "; } cout< for(i=0;i { cout<<" "< for(j=0;j cout< cout<<" "; for(j=0;j cout< cout<<" "; for(j=0;j cout< cout< } } int changdata(int i)//进行资源分配 { int j; for (j=0;j Avaliable[j]=Avaliable[j]-Request[j]; Allocation[i][j]=Allocation[i][j]+Request[j]; Need[i][j]=Need[i][j]-Request[j]; } return 1; } int safe()//安全性算法 { int i=0,k=0,m,apply,Finish[100]={0}; int j; int flag=0; Work[0]=Avaliable[0]; Work[1]=Avaliable[1]; Work[2]=Avaliable[2]; for(i=0;i { apply=0; for(j=0;j { if (Finish[i]==False&&Need[i][j]<=Work[j]) { apply++; if(apply==N)