#include <iostream>
using namespace std;
void main()
{
char res_name[5] = {'a','b','c','d','e'};//进程名字
int Available[5];// 系统当前可用的各种资源数
int Max[10][10];//各资源的最大数
int request[5];//记录资源请求数量
int pc_name; //请求资源的进程名
int choice;// 服务选择
int Safe_sort[10];//各进程的状态
int Available_Save[5] = {0,0,0,0,0};// 保护试分配前的可用资源数
bool status[10] = {false,false,false,false,false,false,false,false,false,false};
int Allocation[10][10];// 各进程已经分配到的各个资源数
int Allocation_Save[10][10];// 保护试分配前各进程已分配的资源数
int Need[10][10];//记录各个进程对各类资源的需求
int ds;//进程道数
int res_kinds;// 资源种类数
int k=0,m=0,n=0;//程序中的计数器,或循环变量控制
cout<<"输入资源的种类数:(0---5)"<<endl;
cin >> res_kinds;
cout<<"输入每类资源的个数:"<<endl;
for(int i=0; i < res_kinds; i++)
{
cout<<"输入第"<<res_name[i]<<"类资源的个数"<<endl;
cin>>Available[i];
}//设置所有资源的最大数
cout<<"输入进程的道数:(0--10)"<<endl;
cin>>ds;
for(int j=1;j<=ds;j++)
for(i=0; i<res_kinds; i++)
{
cout<<"输入进程"<<j<<"对资源"<<res_name[i]<<"最大需求量:"<<endl;
cin >> Max[j-1][i];
}//设定个进程所需各类资源的最大数
for( j=1;j<=ds;j++)
for(i=0; i<res_kinds; i++)
{
cout<<"输入进程"<<j<<"已分到资源"<<res_name[i]<<"的个数"<<endl;
cin>> Allocation[j-1][i];
}//设定个进程已分配各类资源的最大数
for(i=0;i<ds;i++)
for(j=0;j<res_kinds;j++)
Available[j] -= Allocation[i][j];//计算剩余的各类资源数
for(i = 0; i < ds; i++ )
for(j=0;j<res_kinds;j++)
Need[i][j] = Max[i][j] - Allocation[i][j];
cout<<"1:判定当前状态是否安全; 2:请求资源"<<endl;
cin >> choice;
if(choice == 1)
{
for(int i=0 ;i < ds ; i++)
for(int j=0;j<res_kinds;j++)
{
Allocation_Save[i][j] = Allocation[i][j];
}//记录当前的分配状态
for(m=0;m<ds;m++)
{
for(j=0;j<ds;j++)
{
k = 0;
for(i=0;i<res_kinds;i++)
{
if( Need[j][i] <= Available[i] && status[j] != true)
{
k++;//可用的资源的种类数
}
}
if(k >= res_kinds && status[j] != true)
{
status[j] = true;
Safe_sort[n] = j;
n++;//可以运行的进程的个数
cout<<j<<endl;
for(int l=0;l<res_kinds;l++)
{
cout<<Allocation[j][l];
Available[l] += Allocation[j][l];
}
}
}
}
if(n < ds)
{
for(i=0 ;i < ds ; i++)
for(j=0;j<res_kinds;j++)
{
Allocation[i][j] = Allocation_Save[i][j];
}
for(i=0;i<ds;i++)
status[i] = false;
cout<<"现有资源不满足或找不到安全序列!"<<endl;
}
else
{
cout<<"当前状态安全。"<<endl;
cout<<"其中一个安全序列是:"<<endl;
for(i=0; i<ds; i++)
cout<<Safe_sort[i]<<" ";
}
}
else//请求资源
{
cout<<"输入请求资源分配的进程的名字:"<<endl;
cin >> pc_name;
cout<< "输入进程"<<pc_name<<"请求的各类资源的个数"<<endl;
for(i=0;i<res_kinds;i++)
{
cout<<"对资源 "<<res_name[i]<<" 的请求量:"<<endl;
cin >> request[i];
}//设置对资源的请求量
for(i=0 ;i < ds ; i++)
for(j=0;j<res_kinds;j++)
Allocation_Save[i][j] = Allocation[i][j];//保护原状态
for(i=0;i<res_kinds;i++)
if(request[i]<=Need[pc_name-1][i] && request[i]<=Available[i])
k++; //统计满足请求的资源种类数
if(k < res_kinds)
{
cout<<"当前资源不满足,不予以分配!"<<endl;
for(i=0 ;i < ds ; i++)
for(j=0;j<res_kinds;j++)
{
Allocation[i][j] = Allocation_Save[i][j];
}
for(i=0;i<ds;i++)
status[i] = false;
}//恢复原来状态
else
{
for(i=0;i<res_kinds;i++)
Allocation[pc_name-1][i] += request[i];//假设分配后,已分配的资源量
for(m=0;m<ds;m++)
{
for(j=0;j<ds;j++)
{
k = 0;//统计某一进程当前可以得到的资源
for(i=0;i<res_kinds;i++)
{
if( Need[j][i] <= Available[i] && status[j] != true)
{
k++;//可用的资源的种类数
}
}
if(k >= res_kinds && status[j] != true)
{
status[j] = true;
Safe_sort[n] = j;
n++;//可以运行的进程的个数
for(int l=0;l<res_kinds;l++)
{
cout<<Allocation[j][l];
Available[l] += Allocation[j][l];
}
}
}
}
if(n < ds)
{
for(i=0 ;i < ds ; i++)
for(j=0;j<res_kinds;j++)
{
Allocation[i][j] = Allocation_Save[i][j];
}
for(i=0;i<ds;i++)
status[i] = false;
cout<<"找不到安全序列,不予以分配!"<<endl;
}
else
{
cout<<"当前状态安全。"<<endl;
cout<<"其中一个安全序列是:"<<endl;
for(i=0; i<ds; i++)
cout<<Safe_sort[i]<<" ";
}
}
}
}
C++ 实现 银行家算法
3星 · 超过75%的资源 需积分: 9 47 浏览量
2008-11-29
08:14:37
上传
评论 3
收藏 96KB RAR 举报
StreamServer
- 粉丝: 4
- 资源: 9
最新资源
- Pytorch-pytorch深度学习教程之逻辑回归.zip
- Pytorch-pytorch深度学习教程之双向循环网络.zip
- Pytorch-pytorch深度学习教程之卷积神经网络.zip
- Pytorch-pytorch深度学习教程之前馈神经网络.zip
- Pytorch-pytorch深度学习教程之线性回归.zip
- Pytorch-pytorch深度学习教程之基本操作.zip
- 基于QT的地图可视化桌面系统后台数据库为MySQL5.7源码.zip
- 基于simulink的PLL锁相环系统仿真【包括模型,文档,参考文献,操作步骤】
- 基于EM-GMM模型的目标跟踪和异常行为检测matlab仿真【包括程序,注释,参考文献,操作步骤,说明文档】
- 2109010044_胡晨燕_选课管理数据库设计与实现.prj
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论3