📄 单资源银行家.cpp
字号:
单资源家算法
#include "string.h"
#include "iostream.h"
#define M 5 //总进程数
//#define N 1 //总资源数
#define FALSE 0
#define TRUE 1
//M个进程对某类资源最大资源需求量
int MAX[M][1]={{7},{3},{9},{2},{4}};
//系统可用资源数
int AVAILABLE[1]={3};
//M个进程已经得到某类资源的资源量
int ALLOCATION[M][1]={{0},{2},{3},{2},{0}};
//M个进程还需要某类资源的资源量
int NEED[M][1]={{7},{1},{6},{0},{4}};
int Request[1]={0};
void main()
{
int i=0,j=0;
char flag='Y';
void showdata();
void changdata(int);
void rstordata(int);
int chkerr(int);
showdata();
while(flag=='Y'||flag=='y')
{
i=-1;
while(i<0||i>=M)
{
cout<<"请输入需申请资源的进程号(从0到"<<M-1<<"否则重输入!):";
cin>>i;
if(i<0||i>=M)cout<<"输入的进程号不存在,重新输入!"<<endl;
}
cout<<"请输入进程"<<i<<"申请的资源数"<<endl;
cout<<"资源"<<0<<": ";
cin>>Request[0];
if(Request[0]>NEED[i][0])
{
cout<<"进程"<<i<<"申请的资源数大于进程"<<i<<"还需要"<<0<<"类资源的资源量!";
cout<<"申请不合理,出错!请重新选择!"<<endl;
flag='N';
break;
}
else
{
if(Request[0]>AVAILABLE[0])
{
cout<<" 进程"<<i<<"申请的资源数大于系统可用"<<0<<"类资源的资源量!";
cout<<"申请不合理,出错!请重新选择!"<<endl<<endl;
flag='N';
break;
}
}
if(flag=='Y'||flag=='y')
{
changdata(i);
if(chkerr(i))
{
rstordata(i);
showdata();
}
else
showdata();
}
else
showdata();
cout<<endl;
cout<<" 是否继续银行家算法演示,按'Y'或'y'键继续,按'N'或'n'键退出演示: ";
cin>>flag;
}
}
void showdata()
{
int i;
cout<<"系统可用的资源数为:"<<endl<<endl;
cout<<" ";
cout<<" 资源"<<0<<": "<<AVAILABLE[0]<<endl;
cout<<" 各进程还需要的资源量:"<<endl;
for (i=0;i<M;i++)
{
cout<<"进程"<<i<<":";
cout<<" 资源"<<0<<": "<<NEED[i][0];
cout<<endl;
}
cout<<endl;
cout<<"各进程已经得到的资源量: "<<endl<<endl;
for (i=0;i<M;i++)
{
cout<<"进程"<<i<<":";
cout<<" 资源"<<0<<": "<<ALLOCATION[i][0]<<endl;
}
cout<<endl;
};
void changdata(int k)
{
AVAILABLE[0]=AVAILABLE[0]-Request[0];
ALLOCATION[k][0]=ALLOCATION[k][0]+Request[0];
NEED[k][0]=NEED[k][0]-Request[0];
};
void rstordata(int k)
{
AVAILABLE[0]=AVAILABLE[0]+Request[0];
ALLOCATION[k][0]=ALLOCATION[k][0]-Request[0];
NEED[k][0]=NEED[k][0]+Request[0];
};
int chkerr(int s)
{
int WORK,FINISH[M],temp[M];
int i,k=0;
for(i=0;i<M;i++)FINISH[i]=FALSE;
WORK=AVAILABLE[0];
i=s;
while(i<M)
{
if (FINISH[i]==FALSE&&NEED[i][0]<=WORK)
{
WORK=WORK+ALLOCATION[i][0];
FINISH[i]=TRUE;
temp[k]=i;
k++;
i=0;
}
else
{
i++;
}
}
for(i=0;i<M;i++)
if(FINISH[i]==FALSE)
{
cout<<endl;
cout<<" 系统不安全!!! 本次资源申请不成功!!!"<<endl;
cout<<endl;
return 1;
}
cout<<endl;
cout<<" 经安全性检查,系统安全,本次分配成功。"<<endl;
cout<<" 本次安全序列:";
for(i=0;i<M;i++)cout<<"进程"<<temp[i]<<"->";
return 0;
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -