内容发布更新时间 : 2025/1/7 6:14:13星期一 下面是文章的全部内容请认真阅读。
回false,并输出不安全的提示;
bool safety(int iAllocation[N][M],int iNeed[N][M],int iAvailable[M],char cName[N]) {
int i,j,flag,x=0; char num[5]; int Work[M];
bool Finish[N]; //定义基本变量 for(j=0;j<3;j++) Work[j]=iAvailable[j]; //将iAvailable的值赋给Work for(i=0;i<5;i++) //将Finish全部置为False Finish[i]=false;
while(true) //执行无限循环,满足条件时跳出 { flag=0; //每次循环开始时将记录本次循环中是否有使有满足条件iAllocation的标志置为0,若为0表示不存在,若不为0表示存在 for(i=0;i<5;i++) //执行循环,看有没有满足条件的iAllocation {
if(Finish[i]==false&&Work[0]>=iNeed[i][0]&&Work[1]>=iNeed[i][1]&&Work[2]>=iNeed[i][2]) { for(j=0;j<3;j++) { Work[j]+= iAllocation[i][j] ; //Work[j]+= Work[j]+iAllocation[i][j] } Finish[i]=true; //将 Finish置true flag++; //标志加1 num[x++]=cName[i]; //将该序列名赋给数组num[] } } if(flag==0) { cout<<\无安全序列\ //标志为0,证明已无满足条件iAllocation ,退出循环,返回false return false; }
if(Finish[0]==true&&Finish[1]==true&&Finish[2]==true&&Finish[3]==true&&
6
Finish[4]==true) //若所有Finish置为true,输出安全数列,返回True { cout<<\ cout<<\安全序列为:\ for(x=0;x<5;x++) cout< return true; } //安全返回true,不安全返回false bool banker(int iAllocation[N][M],int iNeed[N][M],int iAvailable[M],char cName[N]) { int iMax[N][M]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}}; int t,i,Request[3],check_1[3]; char x; //定义变量 cout<<\请输入进程名:\ //输入进程名 cin>>x; if(x=='a')i=0; if(x=='b')i=1; if(x=='c')i=2; if(x=='d')i=3; if(x=='e')i=4; cout<<\请输入各资源数量:\ //输入变量名 for(t=0;t<3;t++) cin>>Request[t]; for(t=0;t<3;t++) //检查数值 { check_1[t]=Request[t]+iAllocation[i][t]; } for(t=0;t<3;t++) { if((iMax[i][t]-check_1[t])<0) { cout<<\资源申请超过最大需求量!!!\\n\ return false; } } 7 for(t=0;t<3;t++) //检查数值 { if((iAvailable[t]-Request[t])<0) { cout<<\不能满足进程!!!\\n\ return false; } } for(t=0;t<3;t++) //将该变量的 iAvailable、iAllocation、iNeed重新赋值 { iAvailable[t]-=Request[t]; iAllocation[i][t]+=Request[t]; iNeed[i][t]-=Request[t]; } safety(iAllocation,iNeed,iAvailable,cName); //执行安全数列算法 return true; return true; } 实验结果 【实验小结】 通过这次实验,让我更深的了解了银行家算法,银行家算法是避免死锁的主要方法,其思路在很多方面都非常值得我们来学习借鉴。 8 。 9