📄 5.cpp
字号:
#include<stdio.h>
#include<iostream.h>
struct pr
{
char name;
int max[5];
int al[5];
int need[5];
int finishflag;
}p[10];
int av[5];
int re[5];
char na[10];
int a(int i,int b)
{
for(int j=0;j<b;i++)
if(av[j]>=p[i].need[j])
continue;
if(j==(b-1))
return 1;
else
return 0;
}
int aa(int i,int b)
{
int j,a=0;
for(j=0;j<b;j++)
{
if(av[j]>=p[i].need[j])
a++;
}
if(a==j)
return 1;
else
return 0;
}
int bb(int j,int b)
{
int i,a=0;
for(i=0;i<b;i++)
{
if(re[i]<=p[j].need[i])
a++;
}
if(a==i)
return 1;
else
return 0;
}
int cc(int b)
{
int j,a=0;
for(j=0;j<b;j++)
{
if(av[j]>=re[j])
a++;
}
if(a==j)
return 1;
else
return 0;
}
int distribute(int a,int b)//分配
{
cout<<"Available:";
for(int i=0;i<b;i++)
cout<<av[i]<<" ";
cout<<endl;
int finish=0,k=0,count=0;
for(int j=0;j<a;j++)
p[j].finishflag=0;
while(finish<a)
{
for(i=0;i<a;i++)
{
if(p[i].finishflag==0&&aa(i,b))
{
for(j=0;j<b;j++)
av[j]+=p[i].al[j];
p[i].finishflag=1;
finish++;
na[k++]=p[i].name;
break;
}
}
count++;
if(count>a)
return 0;
}
return 1;
}
int request(int a,int b)
{
char m;
int l;
cout<<"请输入进程名称:"<<endl;
cin>>m;
for(int j=0;j<a;j++)
if(m==p[j].name)
l=j;
cout<<"请输入进程"<<p[l].name<<"请求资源数:"<<endl;
for(int i=0;i<b;i++)
cin>>re[i];
if(bb(l,b))
{
if(cc(b))
{
for(i=0;i<b;i++)
{
p[l].al[i]+=re[i];
p[l].need[i]=p[l].max[i]-p[l].al[i];
}
cout<<"各进程还需要的资源数(NEED):"<<endl;
for(i=0;i<a;i++)
{
cout<<p[i].name<<": ";
for(int j=0;j<b;j++)
cout<<p[i].need[j]<<" ";
cout<<endl;
}
return 1;
}
else
cout<<"Request>=Available 让"<<p[l].name<<"等待!"<<endl;
}
else
cout<<"Request>=Need 让"<<p[l].name<<"等待!"<<endl;
return 0;
}
void main()
{
cout<<" 银行家算法"<<endl;
int a,b;
cout<<"请输入进程数目:";
cin>>a;
cout<<"请输入共有几类资源:";
cin>>b;
cout<<"请依次输入"<<a<<"个进程的名称:"<<endl;
for(int i=0;i<a;i++)
cin>>p[i].name;
cout<<"请依次输入"<<a<<"个进程对"<<b<<"类资源的最大需求量(MAX):"<<endl;
for(i=0;i<a;i++)
for(int j=0;j<b;j++)
cin>>p[i].max[j];
cout<<"请依次输入"<<a<<"个进程对"<<b<<"类资源的已分配量(Allocation):"<<endl;
for(i=0;i<a;i++)
for(int j=0;j<b;j++)
cin>>p[i].al[j];
for(i=0;i<a;i++)
for(int j=0;j<b;j++)
p[i].need[j]=p[i].max[j]-p[i].al[j];
cout<<"请输入当前每种资源的总量(All):"<<endl;
for(int j=0;j<b;j++)
cin>>av[j];
cout<<"各进程还需要的资源数(NEED):"<<endl;
for(i=0;i<a;i++)
{
cout<<p[i].name<<": ";
for(int j=0;j<b;j++)
cout<<p[i].need[j]<<" ";
cout<<endl;
}
int flag=1;
char ac;
while(flag)
{
for(i=0;i<a;i++)
for(j=0;j<b;j++)
av[j]-=p[i].al[j];
if(distribute(a,b))
{
cout<<"\n资源配置是安全的!\n";
cout<<"其安全序列是:";
for(int k=0;k<a;k++)
cout<<"-->"<<na[k];
cout<<endl;
cout<<"有进程发出Request吗?(Y/N)"<<endl;
cin>>ac;
if(ac=='y'||ac=='Y')
{
if(request(a,b))
continue;
else
flag=0;
}
else
flag=0;
}
else
{
flag=0;
cout<<"不安全!"<<endl;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -