回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