📄 bunker.cpp
字号:
#include<iostream.h>
const int m=3,n=5;//m:资源种类数,n:进程数。
class BUNKer
{
public:
void input(void);
int Request(int Requestbuf[m],int i);
private:
int Available[m];//可利用资源向量。
int Max[n][m];//最大需求矩阵。
int Allocation[n][m];//分配矩阵。
int Need[n][m];//需求矩阵。
int Work[m];//工作向量。
int Finish[n];//可完成标志。
int Safe(void);
};
int BUNKer::Safe(void)
{
int i,j;
for(j=0;j<m;j++)
Work[j]=Available[j];
for(i=0;i<n;i++)
Finish[i]=0;
do
{
for(i=0;i<n;i++)
{
j=0;
if(!Finish[i])
for(;j<m;j++)
if(Need[i][j]>Work[j])
break;
if(j==m)
break;
}
if(i<n)
{
for(j=0;j<m;j++)
Work[j]+=Allocation[i][j];
Finish[i]=1;
}
else
break;
}while(1);
for(i=0;i<n;i++)
if(!Finish[i])
break;
if(i==n)
return 1;
else
return 0;
}
void BUNKer::input(void)//输入初值。
{
int i,j;
for(i=0;i<m;i++)
cin>>Available[i];
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
cin>>Max[i][j];
for(j=0;j<m;j++)
cin>>Allocation[i][j];
for(j=0;j<m;j++)
cin>>Need[i][j];
}
}
int BUNKer::Request(int Requestbuf[m],int i)//银行家算法的一次运作。
{
int j;
for(j=0;j<m;j++)
if(Requestbuf[j]>Need[i][j])
return -1;
for(j=0;j<m;j++)
if(Requestbuf[j]>Available[j])
return 0;
for(j=0;j<m;j++)
{
Available[j]-=Requestbuf[j];
Allocation[i][j]-=Requestbuf[j];
Need[i][j]-=Requestbuf[j];
}
if(!Safe())
{
for(j=0;j<m;j++)
{
Available[j]+=Requestbuf[j];
Allocation[i][j]+=Requestbuf[j];
Need[i][j]+=Requestbuf[j];
}
return 0;
}
else
return 1;
}
void main(void)
{
BUNKer BUNKer1;
int i,j;
int Request[n][m];//资源请求矩阵。
int Requestbuf[m];
cout<<"hello!\n";
BUNKer1.input();
i=0;
for(j=0;j<m;j++)
Requestbuf[j]=Request[i][j];
switch(BUNKer1.Request(Requestbuf,i))
{
case -1:
cout<<"ERROR!!\n";
break;
case 0:
cout<<"WAIT...\n";
break;
case 1:
cout<<"OK!\n";
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -