银行家算法C++源程序及流程图 第2页
}
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;
}
}
1. 测试数据与实验结果