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

C++银行家算法避免死锁


for(i=0;i<n;i++) //假设系统将申请资源数分配给该进程, 对数据进行相关修改 { Available[i] -= Request[i]; Need[number-1][i] -= Request[i]; Allocation[number-1][i] += Request[i]; } if(Safe_test()) //安全性检查结果为安全 { cout<<"系统可以为该进程分配资源.\n"; return ; } else //安全性检查结果为不安全 { cout<<"系统不为该进程分配资源\n"; //x=temp; //将相关矩阵修改过来, 表示资源不分配资源 return ; } }
} } cout<<"开始设置需求矩阵..."<<'\n'; for(i=0;i<m;i++) //设置需求矩阵 { for(j=0;j<n;j++) { Need[i][j]=Max[i][j]-Allocation[i][j]; } } cout<<"需求矩阵设置完毕。"<<'\n'; cout<<"输入可利用资源向量:"<<'\n'; for(i=0;i<n;i++) //设置可利用资源向量 { cin>>Available[i]; } }
} for(i=0;i<m;i++)//检查标志数组,若有一个为 false 则找不 到安全序列 { if(!Finish[i]) { cout<<"找不到安全序列,系统处于不安全状态!\n"; return 0; }
else { cout<<" 找到安全序列 :"; // 找到安全序列并显示该 序列
void Initilize(); //初始化 int Safe_test(); //检查安全性 void Resoure_allocate(); //系统对进程资源申请的处理 void csh();//主函数中调用初始化 void Sqzy();//调用申请资源 int m,n;//输入进程和资源种类数
else { if(b==3) { system("cls"); system("exit"); } else { cout<<"您的输入有误,请重新输入:"<<endl; Sqzy(); } } } } BankAlgorithm.cpp 文件 #include " BankAlgorithm.h " void main() { csh(); }
} } }
void Sqzy()//是否进入申请资源 { int b; cout<<"为进程申请资源请输入 1,返回初始化请输入 2, 退出请输入 3:"<<endl; cin>>b; if(b==1) { Resoure_allocate(); Sqzy(); } else { if(b==2) { system("cls"); csh(); }
for(i=0;i<m;i++) cout<<"P"<<safeprocess[i]+1<<" "; cout<<"\n 系统处于安全状态.\n";
} } return 1; }
void Resoure_allocate() { //bank temp=x; //临时变量存储 x 的初值 int Request[MaxrResource]; //请求向量 int number; //进程号 int i;
break; //不满足则跳出 } if(j==n) //第 i 个进程满足执行条件 { safeprocess[k++]=b; // 将进程号存入安全序列 向量 for(int q=0;q<n;q++) //修改空闲资源矩阵 work[q]+=Allocation[b][q]; Finish[b]=true; //标志该进程可完成 } } }
vout<<"模拟利用银行家算法避免死锁"<<endl; cout<<"进入初始化过程请输入 1,退出请输入 2"<<endl; cin>>a; if(a==1) { Initilize(); Safe_test(); Sqzy(); }else { if(a==2) { system("cls");//清屏 system("exit");//退出 } else { cout<<"您的输入有误,请重新输入:"<<endl; cin>>a; csh();
cout<<"请输入要申请资源的进程序号:\n"; cin>>number; cout<<"请输入请求向量:\n"; for(i=0;i<n;i++) cin>>Request[i]; //输入请求向量 for(i=0;i<n;i++) { if(Request[i]>Need[number-1][i]) // 所 需 资 源 数 大 于 需 求量 { cout<<" 进程所需要的资源数已超过它所宣布的最 大值,系统不予分配资源!\n"; return ; } if(Request[i]>Available[i]) // 所需资源数大于可利用资 源 { cout<<"系统中无足够的资源满足进程的申请, 系统 不予分配资源!\n"; return ; } }
BankAlgorithm.h 文件 #include <iostream.h> #include<stdlib.h>
#define /*最大进程数*/ #define /*最大资源数*/
MaxProcess
50
MaxrResource
200
int Available[MaxrResource]; //可利用资源向量 int Max[MaxProcess][MaxrResource]; //最大需求矩阵 int Allocation[MaxProcess][MaxrResource]; //分配矩阵 int Need[MaxProcess][MaxrResource]; //需求矩阵
int Safe_test() { int i,j; int safeprocess[MaxProcess]; //安全序列向量
int work[MaxrResource]; //空闲资源矩阵 int Finish[MaxProcess]; //进程完成标志矩阵 for(i=0;i<n;i++) //开始时可利用资源向量就是空闲资源矩 阵 { work[i]=Available[i]; } for(i=0;i<m;i++)//初始化标志矩阵为 false { Finish[i]=false; } int k=0; //安全序列排列号 for(i=0;i<m;i++) //每次都从第一个进程开始做循环 { for(int b=0;b<m;b++) { if(Finish[b]==false) { for(j=0;j<n;j++) { if(Need[b][j]>work[j]) // 判断当前进程需求矩 阵能否得到满足
void Initilize()
{ int i,j;
cout<<"初始化过程,输入相关数据:\n"; cout<<"请输入系统进程数 m:"<<endl; cin>>m; cout<<"请输入系统资源种类 n:"<<endl; cin>>n; cout<<"输入最大需求矩阵 Max:"<<'\n'; for(i=0;i<m;i++) //设置最大需求矩阵 { for(j=0;j<n;j++) { cin>>Max[i][j]; } } cout<<"输入分配矩阵 Allocation:"<<'\n'; for(i=0;i<m;i++) //设置分配矩阵 { for(j=0;j<n;j++) { cin>>Allocation[i][j];
相关主题