当前位置:文档之家› C++银行家算法

C++银行家算法

使用C++程序设计银行家算法



#include
using namespace std;
#define N 4 //定义进程数
#define M 3 //定义资源数
#define False 0
#define True 1


//———————————— 初始化资源分配表 ——————————————

int Max[N][M]={{5,2,5},{6,5,3},{3,1,6},{4,7,2}}; //各进程所需最大资源数
int Allocation[N][M]={{1,0,0},{5,1,1},{2,1,1},{0,0,2}}; //系统已分配资源
int Need[N][M]={{2,2,2},{1,0,2},{1,0,3},{4,2,0}}; //还需资源
int Available[M]={1,1,2}; //系统可用资源
int Request[M]; //请求分配的资源序列

//————————————— 所 用 函 数 ———————————————
void showdata();//显示资源状况
int request(int i);//资源分配算法
int safe();//安全性算法
int free(int i);//资源释放

//+++++++++++++++ 输出资源状况 +++++++++++++++
void showdata()
{ int i,j;
cout<<"+++++++++++++++++++++++++++++++"<cout<<"+++++ 资源分配情况 +++++"<cout<<"+++++++++++++++++++++++++++++++"<
//输出可用资源
cout<<"系统可用资源(Available):\n";//按 罗列各类资源
cout<<" <";
for(j=0;j{cout<<"R"<if(j}
cout<<">:";
for (j=0;j{cout<}
cout<

//输出所需资源
cout<<"各进程资源最大需求(Max):\n";
cout<<" \n";
for (i=0;i{cout<<" pr"<for (j=0;j{cout<}
cout<}
cout<

//输出所获得的资源情况
cout<<"各进程当前获得资源(Allocation):\n";
cout<<" \n";
for (i=0;i{cout<<" pr"<for(j=0;j{cout<}
cout<}
cout<

//输出仍需资源情况
cout<<"各进程仍需资源(Need):\n";
cout<<" \n";
for (i=0;i{cout<<" pr"<for(j=0;j{cout<}
cout<}
cout<<"================================="<cout<<"================================="<}


//+++++++++++++++++++ 资 源 分 配 算 法 +++++++++++++++++++++++
int request(int i)//为进程pr[i]进行资源分配
{
int j,flag;
for (j=0;j{
if(Request[j]>Need[i][j])
{
cout<<"对不起,申请的资源大于它需要的资源数,请重试!";
return -1; break;
}
if(Request[j]>Available[j])
{
cout<<"对不起,当前系统可用资源不够,请等待!";
return -1; break;
}
}
for (j=0;j{
Available[j]=Avail

able[j]-Request[j]; //可用资源减少
Allocation[i][j]=Allocation[i][j]+Request[j];//所得资源增加
Need[i][j]=Need[i][j]-Request[j]; //仍需资源减少
}
flag=safe();
if(flag<0)
{
cout<<"分配不成功,请等待!";
for (j=0;j{
Available[j]=Available[j]+Request[j];
Allocation[i][j]=Allocation[i][j]-Request[j];
Need[i][j]=Need[i][j]+Request[j];
}
}
return 0;
}


//+++++++++++++++++++++++ 安 全 性 算 法 +++++++++++++++++++++++++
int safe()
{
int Finish[N]={False};
int Work[M],temp[N];
int i,j,k,z=0,flag;
for(j=0;jWork[j]=Available[j]; //工作分配初始化为系统可用资源
for(i=0;i{
flag=0; //标记
for(j=0;j{
if(Finish[i]==False && Need[i][j]<=Work[j])//R[j]类资源满足
{
flag++; //统计得到满足的资源类总数
if(flag==M) //进程Pr[i]各类全部得到满足
{
for(k=0;kWork[k]+=Allocation[i][k];//工作分配加上可用资源
Finish[i]=True; //将进程pr[i]写入安全序列中
temp[z]=i; z++; //序列生成
i=-1; //为下一次进程全扫描作准备
}
}
else break;
}
if(Finish[i]==False && i==N-1)//全扫描至最后一个进程仍未分配
{
cout<<"系统不安全!!!\n";//如果不成功,输出系统不安全
return -1;
break;
}
else if(Finish[i]==True && i==N-1) break;//进程全部分配成功
}
cout<<"系统资源分配成功!"<cout<<"安全序列:";
for(z=0;zcout<<"pr"<cout<return 0;
}


//+++++++++++++++++++ 资 源 释 放 +++++++++++++++++++++
int free(int i)
{
int j;
for(j=0;j{
Available[j]+=Allocation[i][j]; //系统可用资源增加
Allocation[i][j]=0; //进程所获资源置0
}
return 1;
}
//++++++++++++++++++++ 主函数+++++++++++++++++++++++
int main()
{
int choice; //用户选择
showdata(); //显示资源状况
safe(); //进行安全性检查
while(1)
{
cout<cout<<"************************************"<cout<<"** 1:分配资源 2:释放资源 **"<cout<<"** 3:显示资源 4:离 开 **"<cout<<"************************************"<cout<<"输入要进行的操作:";
cin>>choice;
if(choice==1)//分配资源
{
int i;
cout<<"请输入

您要分配的进程号(0,1,2,3):";
cin>>i;
cout<<"请输入您要为该进程分配的资源:";
for(int j=0;j>Request[j];
request(i);
}
else if(choice==2)//释放资源
{
int i;
cout<<"请输入您要释放资源的进程号(0,1,2,3):";
cin>>i;
free(i);
}
else if(choice==3)//显示资源
{
showdata();
}
else if(choice==4) break; //离 开
else cout<<"请输入合法数字!";
}

}

相关主题
文本预览
相关文档 最新文档