银行家算法C++源程序及流程图 第4页
#include <iostream>
using namespace std;
#define I 50 /*最大进程数*/
#define J 100 /*最大资源数*/
#define False 0
#define True 1
int Available[J]; /*可利用资源数*/
int MAX[I][J]; /*最大需求矩阵*/
int Allocation[I][J]; /*分配矩阵*/
int Need[I][J]; /*需求矩阵*/
int Request[I][J];/*进程需要资源数*/
int Finish[I];
/*系统是否有足够的资源分配*/
int p[I]; /*记录序列*/
int M,N; /*M个进程,N类资源*/
void initial();
bool Safe();
void request();
void initial() /*初始化算法*/
{
int i,j;
cout<<"输入进程数:";
cin>>M;
cout<<"输入资源的种类数:";
cin>>N;
cout<<"输入每个进程最多所需的各资源:"<<endl;
for(i=0;i<M;i++)
for(j=0;j<N;j++)
cin>>MAX[i][j];
cout<<"输入每个进程已分配的各资源数:"<<endl;
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
cin>>Allocation[i][j];
Need[i][j]=MAX[i][j]-Allocation[i][j];
if(Need[i][j]<0)
{
cout<<"您输入的第"<<i+1<<"个进程所拥有的第"<<j+1<<"个资源数错误,请重新输入:"<<endl;
j--;
continue;
}
}
}
cout<<"输入各个资源现有数目:"<<endl;
for(i=0;i<N;i++)
{
cin>>Available[i];
}
}
void request() /*银行家算法*/
{
int i,ID;
char again;
while(1)
{
cout<<"输入要申请资源的进程号"<<endl;
cin>>ID;
cout<<"输入进程所请求的各资源的数量:"<<endl;
for(i=0;i<N;i++)
{
cin>>Request[ID][i];
}
for(i=0;i<N;i++)
{
if(Request[ID][i]>Need[ID][i])
{
cout<<"输入的请求资源数超过所需的资源最大数!请重新输入!"<<endl;
continue;
}
if(Request[ID][i]>Available[i])
{
cout<<"尚无足够资源!请重新输入!"<<endl;
continue;
}
}
for(i=0;i<N;i++)
{
Available[i]-=Request[ID][i];
Allocation[ID][i]+=Request[ID][i];
Need[ID][i]-=Request[ID][i];
}
if(Safe())
{
cout<<"同意分配请求!"<<endl;
}
else
{
cout<<"请求被拒绝!"<<endl;
for(i=0;i<N;i++)
{
Available[i]+=Request[ID][i];
Allocation[ID][i]-=Request[ID][i];
Need[ID][i]+=Request[ID][i];
}
}
for(i=0;i<M;i++)
{
Finish[i]=0;
}
cout<<"再次请求分配按y/Y,否请按其它键."<<endl;
cin>>again;
if(again=='y'||again=='Y')
{
continue;
}
break;
}
}
bool Safe() /*安全性算法*/
{
int i,j,k,l=0;
int Work[J]; /*工作数组*/
for(i=0;i<N;i++)
Work[i]=Available[i];
for(i=0;i<M;i++)
{
Finish[i]=0;
}
for(i=0;i<M;i++)
{
if(Finish[i]==1)
{
continue;
}
else
{
for(j=0;j<N;j++)
{
if(Need[i][j]>Work[j])
{
break;
}
}
if(j==N)
{
Finish[i]=1;
for(k=0;k<N;k++)
{
Work[k]+=Allocation[i][k];
}
p[l++]=i;
i=-1;
}
else
{www.751com.cn
continue;
}
}
if(l==M)
{
cout<<"系统是安全的"<<endl;
cout<<"安全序列:"<<endl;
for(i=0;i<l;i++)
{
cout<<p[i];
if(i!=l-1)
{
cout<<" ";
}
}
cout<<""<<endl;
return 1;
}
}
cout<<"系统是不安全的"<<endl;
return 0;
}
int main()
{
initial();
Safe();
request
上一页 [1] [2] [3] [4]
银行家算法C++源程序及流程图 第4页下载如图片无法显示或论文不完整,请联系qq752018766