⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 banker.cpp

📁 完成操作系统课程中的经典防止死锁的有效算法--银行家算法
💻 CPP
字号:
#include<iostream.h>  
  #include<stdlib.h>  
  const   int   m=3;  
  const   int   n=5;  
  int   MaxAvailable[m]={10,5,7};  
  int   Max[n][m]={7,5,3,3,2,2,9,0,2,2,2,2,4,3,3};  
  int   Allocation[n][m]={0,1,0,2,0,0,3,0,2,2,1,1,0,0,2};  
  int   Available[m];  
  int   Need[n][m];  
  struct   Request  
  {  
  int   p;  
  int   k[m];  
  };  
  Request   r;  
  //int   Need[n][m]={7,4,3,1,2,2,6,0,0,0,1,1,4,3,1};  
  bool   safe()  
  {  
  int   Work[m];  
  for(int   i=0;i<m;i++)  
  {Work[i]=Available[i];}  
  bool   Finish[n];  
  for(i=0;i<n;i++)  
  Finish[i]=false;  
          for(int   iy=0;iy<n;iy++)  
  {  
  for(i=0;i<n;i++)  
  {  
      if(!Finish[i])  
      {  
      for(int   j=0;j<m;j++)  
      {  
        if(Need[i][j]>Work[j])  
        {break;}  
      }  
              if(j==m)  
      {  
        for(int   ix=0;ix<m;ix++)  
        {Work[ix]+=Allocation[i][ix];}  
          Finish[i]=true;  
          cout<<"["<<i<<"]"<<"   ";  
          break;  
      }  
      }  
  }  
   
  }  
  for(i=0;i<n;i++)  
  {  
  if(!Finish[i])  
  break;  
  }  
  if(i<n)  
  {cout<<"Dengerous!"<<endl;  
    return   false;  
  }  
  else  
  return   true;  
  }  
  void   bank(Request   r)  
  {  
  int   i;  
  int   j;  
  for(i=0;i<n;i++)  
  for(j=0;j<m;j++)  
  {Need[i][j]=Max[i][j]-Allocation[i][j];}  
  for(i=0;i<m;i++)  
  {Available[i]=MaxAvailable[i];}  
  for(i=0;i<n;i++)  
  for(j=0;j<m;j++)  
  {Available[j]-=Allocation[i][j];}  
          for(i=0;i<m;i++)  
  {  
  if(r.k[i]>Need[r.p][i])  
  {break;}  
  }  
  if(i<m)  
  {cout<<"Your   request   over   need!"<<endl;  
    exit(1);}  
          else  
  {  
  for(i=0;i<m;i++)  
  {  
  if(r.k[i]>Available[i])  
        break;  
  }  
  if(i<m)  
  {cout<<"Process["<<r.p<<"]   Wait!"<<endl;}  
  else  
  {  
  for(i=0;i<m;i++)  
  {  
  Available[i]-=r.k[i];  
          Allocation[r.p][i]+=r.k[i];  
  Need[r.p][i]-=r.k[i];  
                                  //cout<<"["<<Available[i]<<"]";  
  //cout<<"{"<<Allocation[r.p][i]<<"}";  
  //cout<<Need[r.p][i]<<":::";  
  }  
  if(!safe())  
  {  
  for(i=0;i<m;i++)  
  {  
                                      Available[i]+=r.k[i];  
              Allocation[r.p][i]-=r.k[i];  
      Need[r.p][i]+=r.k[i];  
  }  
  cout<<"It   is   not   safe!"<<endl;  
  }  
  else  
  {cout<<"Safe!"<<endl;}  
  }  
  }  
  }  
   
  void   main()  
  {  
  Request   r;  
  r.p=1;  
  int   request[m]={1,0,2};  
  for(int   i=0;i<m;i++)  
  {r.k[i]=request[i];}  
  bank(r);  
  }   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -