📄 banker.cpp
字号:
#include<iostream.h>
#include<stdlib.h>
const int m=3;
const int n=5;
int MaxAvailable[m]={10,5,7};
int Max[n][m]={7,5,3,3,2,2,9,0,2,2,2,2,4,3,3};
int Allocation[n][m]={0,1,0,2,0,0,3,0,2,2,1,1,0,0,2};
int Available[m];
int Need[n][m];
struct Request
{
int p;
int k[m];
};
Request r;
//int Need[n][m]={7,4,3,1,2,2,6,0,0,0,1,1,4,3,1};
bool safe()
{
int Work[m];
for(int i=0;i<m;i++)
{Work[i]=Available[i];}
bool Finish[n];
for(i=0;i<n;i++)
Finish[i]=false;
for(int iy=0;iy<n;iy++)
{
for(i=0;i<n;i++)
{
if(!Finish[i])
{
for(int j=0;j<m;j++)
{
if(Need[i][j]>Work[j])
{break;}
}
if(j==m)
{
for(int ix=0;ix<m;ix++)
{Work[ix]+=Allocation[i][ix];}
Finish[i]=true;
cout<<"["<<i<<"]"<<" ";
break;
}
}
}
}
for(i=0;i<n;i++)
{
if(!Finish[i])
break;
}
if(i<n)
{cout<<"Dengerous!"<<endl;
return false;
}
else
return true;
}
void bank(Request r)
{
int i;
int j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{Need[i][j]=Max[i][j]-Allocation[i][j];}
for(i=0;i<m;i++)
{Available[i]=MaxAvailable[i];}
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{Available[j]-=Allocation[i][j];}
for(i=0;i<m;i++)
{
if(r.k[i]>Need[r.p][i])
{break;}
}
if(i<m)
{cout<<"Your request over need!"<<endl;
exit(1);}
else
{
for(i=0;i<m;i++)
{
if(r.k[i]>Available[i])
break;
}
if(i<m)
{cout<<"Process["<<r.p<<"] Wait!"<<endl;}
else
{
for(i=0;i<m;i++)
{
Available[i]-=r.k[i];
Allocation[r.p][i]+=r.k[i];
Need[r.p][i]-=r.k[i];
//cout<<"["<<Available[i]<<"]";
//cout<<"{"<<Allocation[r.p][i]<<"}";
//cout<<Need[r.p][i]<<":::";
}
if(!safe())
{
for(i=0;i<m;i++)
{
Available[i]+=r.k[i];
Allocation[r.p][i]-=r.k[i];
Need[r.p][i]+=r.k[i];
}
cout<<"It is not safe!"<<endl;
}
else
{cout<<"Safe!"<<endl;}
}
}
}
void main()
{
Request r;
r.p=1;
int request[m]={1,0,2};
for(int i=0;i<m;i++)
{r.k[i]=request[i];}
bank(r);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -