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

📄 c++实现银行家算法.txt

📁 大家来看看这个源码吧! 我是新手
💻 TXT
字号:
C++实现银行家算法

#include <string.h> 
#include <iostream.h> 
#define M 5 //总进程数 
#define N 3 //总资源数 
#define FALSE 0 
#define TRUE 1 


 
int Available[N] = {3,3,2};//系统可用资源向量

int Max[M][N] = {
        {7,5,3},
        {3,2,2},
        {9,0,2},
        {2,2,2},
        {4,3,3},
    };//最大需求向量
int Allocation[M][N] = {
        {0,1,0},
        {2,0,0},
        {3,0,2},
        {2,1,1},
        {0,0,2},
        };//资源分配向量

int Need[M][N] = {
    {7,4,3},
    {1,2,2},
    {6,0,0},
    {0,1,1},
    {4,3,1},
    };//需求向量

 int Request[N]={0,0,0}; 


void ShowData() //显示各数据
{ 
int i,j;
cout<<"******************************************"<<endl;
cout<<"各进程最大需求矩阵Max为:"<<endl;
for (j=0;j<N;j++) 
cout<<"        R"<<j; 
cout<<endl; 
for (i=0;i<M;i++) 
{ 
cout<<"P"<<i<<":"; 
for (j=0;j<N;j++)  cout<<"   "<< Max[i][j]<<"        "; 
cout<<endl; 
}   
cout<<"******************************************"<<endl;
cout<<endl;


cout<<"******************************************"<<endl;
cout<<"资源分配矩阵Available为:"<<endl; 
cout<<" ";   
for (j=0;j<N;j++)   cout<<"      R"<<j<<":    ";
cout<<endl;
for(j=0;j<N;j++) cout<<"        "<<Available[j]<<"    ";
cout<<endl; 
cout<<"******************************************"<<endl;
cout<<endl;  


cout<<"******************************************"<<endl; 
cout<<"各进程还需要的资源量矩阵Need:"<<endl; 
for (j=0;j<N;j++) 
cout<<"        R"<<j; 
cout<<endl;
for (i=0;i<M;i++) 
{ 
cout<<"P"<<i<<":"; 
for (j=0;j<N;j++)  cout<<"   "<<Need[i][j]<<"         "; 
cout<<endl; 
}
cout<<"******************************************"<<endl; 
cout<<endl;


cout<<"******************************************"<<endl; 
cout<<" 各进程已经获得的资源量矩阵Allocation: "<<endl;
for (j=0;j<N;j++) 
cout<<"         R"<<j; 
cout<<endl; 
for (i=0;i<M;i++) 
{ 
cout<<"P"<<i<<":"; 
for (j=0;j<N;j++)  cout<<"   "<<Allocation[i][j]<<"         "; 
cout<<endl; 
}
cout<<"******************************************"<<endl; 
cout<<endl; 

}

void ChangData(int k) //改变数据
{ 
int j; 
for (j=0;j<N;j++) 
{ 
Available[j]=Available[j]-Request[j]; 
Allocation[k][j]=Allocation[k][j]+Request[j]; 
Need[k][j]=Need[k][j]-Request[j]; 
} 

}

void RestorData(int k) //经系统安全检查后,假如分配不成功需恢复数据
{ 
int j; 
for (j=0;j<N;j++) 
{ 
Available[j]=Available[j]+Request[j]; 
Allocation[k][j]=Allocation[k][j]-Request[j]; 
Need[k][j]=Need[k][j]+Request[j]; 
} 

}

int CheckSafe(int s) //安全检查
{ 
int Work,Finish[M],Temp[M]; 
int i,j,k=0; 
for(i=0;i<M;i++)    Finish[i]=FALSE; 
   for(j=0;j<N;j++) 
   { 
    Work=Available[j]; 
    i=s; 
         while(i<M) 
   { 
             if (Finish[i]==FALSE&&Need[i][j]<=Work) 
    { 
               Work=Work+Allocation[i][j]; 
               Finish[i]=TRUE; 
               Temp[k]=i; 
                k++; 
                i=0; 
    } 
             else 
    { 
                   i++; 
    } 
   } 
   for(i=0;i<M;i++) 
     if(Finish[i]==FALSE) 
  { 
         cout<<endl; 
          cout<<" 系统处于不安全状态, 本次资源申请不成功!"<<endl; 
         cout<<endl; 
         return 1; 
  } 
   } 

cout<<endl; 
cout<<" 经安全性检查,系统处于安全状态,本次分配成功!"<<endl; 
cout<<endl; 
cout<<" 本次安全序列为:"; 
for(i=0;i<M;i++)cout<<"P"<<Temp[i]<<"   "; 
cout<<endl<<endl;; 
return 0; 
}


void main() 
{ 
int i=0,j=0; 
char flag='y';
void ShowData(); 
void ChangData(int); 
void RestorData(int); 
int CheckSafe(int); 
ShowData();//显示此算法中的数据
CheckSafe(0);//检查初始时刻的资源分配是否处于安全状态
while(flag=='y') 
{ 
      i=-1; 
       while(i<0||i>=M) 
    { 
           cout<<" 请输入需申请资源的进程号(从0到"<<M-1<<",否则重新输入):"; 
           cin>>i; 
           if(i<0||i>=M)cout<<" 输入的进程号不存在,请重新输入:"<<endl; 
    } 
       cout<<" 请输入进程"<<i<<"申请的资源数:"<<endl; 
     for (j=0;j<N;j++) 
  { 
      
       cin>>Request[j]; 
       if (Request[j]>Max[i][j]) 
       {
    cout<<"P"<<i<<"申请的资源数大于最大需求数,此进程非法!"<<endl;
    break;
       }
       else if(Request[j]>Need[i][j]) 
   {  
        cout<<"  P"<<i<<"申请的资源数大于进程"<<i<<"还需要"<<j<<"类资源的资源量!"; 
        cout<<"申请不合理,请重新选择:"<<endl<<endl; 
         
          
   } 
       
   else if(Request[j]>Available[j]) 
   { 
           cout<<" P"<<i<<"申请的资源数大于系统可用"<<j<<"类资源的资源量!";
            cout<<"申请不合理,请重新选择:"<<endl<<endl;
         }
   
    
  } 
          if(flag=='y') 
    { 
            ChangData(i); 
               if(CheckSafe(i)) 
      { 
                 RestorData(i); 
                 ShowData(); 
      } 
              else 
                ShowData(); 
    } 
         else 
          ShowData(); 
        cout<<endl; 
          cout<<" 是否继续银行家算法演示,按'y'键继续,按其他任意 键退出演示: "; 
         cin>>flag; 
} 
} 

⌨️ 快捷键说明

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