📄 banker.txt
字号:
#include <iostream.h>
#include <stdio.h>
int available[3]={3,3,2},max[5][3]={7,5,3,3,2,2,9,0,2,2,2,2,4,3,3};
int allocation[5][3]={0,1,0,2,0,0,3,0,2,2,1,1,0,0,2};
int need[5][3]={7,4,3,1,2,2,6,0,0,0,1,1,4,3,1};
bool needcheck(int i,int work[3])//检查need[i,j]<=work[j]
{
for(int m=0;m<3;m++)
{
if(need[i][m]>work[m])
return 0;
}
return 1;
}
void workwrite(int i,int work[3])//修改work[3]
{
for(int m=0;m<3;m++)
{
work[m]=work[m]+allocation[i][m];
}
}
void showfinsh(int finsh[5])//显示finsh[5]的数值(调试用)
{
for(int i=0;i<5;i++)
{
cout<<finsh[i];
}
}
bool finshcheck(int finsh[5])//检查finsh[5]是否全为1
{
for(int i=0;i<5;i++)
{
if(finsh[i]==0)
return 0;
}
return 1;
}
bool safecheck()//安全检查函数
{
int work[3],i,p,m=0;
int finsh[5]={0,0,0,0,0};
int order[5]={-1,-1,-1,-1,-1};
for(i=0;i<3;i++)
{
work[i]=available[i];
}
for(p=0;p<5;p++)
{
for(i=0;i<5;i++)
{
if(finsh[i]==0&&needcheck(i,work))
{
workwrite(i,work);
finsh[i]=1;
order[m++]=i;
}
}
}
//showfinsh(order);
if(finshcheck(finsh))
{
//cout<<"系统是安全的"<<endl;
return 1;
}
else
{
//cout<<"系统不安全"<<endl;
return 0;
}
}
bool requestneedcheck(int i,int request[3])//request[]和need[]比较
{
for(int j=0;j<3;j++)
{
if(request[j]>need[i][j])
return 0;
}
return 1;
}
bool requestavacheck(int i,int request[3])//request[]和availiable[]比较
{
for(int j=0;j<3;j++)
{
if(request[j]>available[j])
return 0;
}
return 1;
}
bool Request()//请求资源函数
{
int pro,request[3],i;
cout<<"请输入请求资源的进程号:";
cin>>pro;
for(i=0;i<3;i++)
{
cout<<"请输入请求的资源"<<i<<"的数目:";
cin>>request[i];
}
if(requestneedcheck(pro,request))
{
if(requestavacheck(pro,request))
{
for(i=0;i<3;i++)
{
available[i]-=request[i];
allocation[pro][i]+=request[i];
need[pro][i]-=request[i];
}
if(safecheck())
{
cout<<"分配成功"<<endl;
return 1;
}
else
{
cout<<"分配失败,请等待"<<endl;
available[i]+=request[i];
allocation[pro][i]-=request[i];
need[pro][i]+=request[i];
return 0;
}
}
else
{
cout<<"无足够资源,等待"<<endl;
return 0;
}
}
else
{
cout<<"资源超过最大"<<endl;
return 0;
}
}
void main()
{
if(safecheck())
{
while(1)
{
Request();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -