 
                    
                
         
    
    
    
    
    
        
            
                
    
        
        
            
    -  
-  
-  
-  
-  
-  
-  
-  
-  
-   
- #include<stdio.h>   
- #define RN  3//资源的数目为3   
- #define PN  5//进程数目为5   
-   
-   
-   
- void Init();  
- int Banker(int i,int Requist[]);  
- bool Security(int s[],int t[][RN],int p[][RN]);  
-   
- void main()   
- {  
-       
-     int Available[RN]={3,3,2};  
-     int Max[PN][RN]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};  
-                                                                 
-     int Allocation[PN][RN]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};  
-                                                               
-     int Need[PN][RN]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};  
-     int P1[]={1,0,2};  
-     int P4[]={3,3,0};   
-     int P0[]={0,1,0};   
-     int i=0;  
-     bool flag1;   
-       
-     Init();   
-       
-     flag1=Security(Available,Need,Allocation);   
-     if(flag1)   
-     {   
-         printf("/n");   
-         printf("当前系统处于安全状态!/n");   
-     }   
-     else  
-     {   
-         printf("/n");   
-         printf("当前系统处于不安全状态!/n");   
-     }   
-   
-     i=1;   
-     Banker(i,P1);   
-     printf("/n");   
-  
-  
-  
-  
-  
-  
-  
-   
- }   
-   
-   
- void Init()   
- {   
-     int i,j;   
-       
-     int Available[RN]={3,3,2};  
-     int Max[PN][RN]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};  
-                                                                 
-     int Allocation[PN][RN]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};  
-                                                               
-     int Need[PN][RN]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};  
-     printf("T0时刻的资源分配图如下:/n");   
-     printf("各个资源最大需求矩阵如下:/n");   
-     printf("   A B C/n");   
-     for(i=0;i<PN;i++)   
-     {   
-         printf("p%d:",i);   
-         for(j=0;j<RN;j++)   
-             printf("%d ",Max[i][j]);   
-         printf("/n");   
-     }   
-     printf("各个资源分配矩阵如下:/n");   
-     printf("   A B C/n");   
-     for(i=0;i<PN;i++)   
-     {   
-         printf("p%d:",i);   
-         for(j=0;j<RN;j++)   
-             printf("%d ",Allocation[i][j]);   
-         printf("/n");   
-     }   
-     printf("各个资源需求矩阵如下:/n");   
-     printf("   A B C/n");   
-     for(i=0;i<PN;i++)   
-     {   
-         printf("p%d:",i);   
-         for(j=0;j<RN;j++)   
-             printf("%d ",Need[i][j]);   
-         printf("/n");   
-     }   
-     printf("可利用资源向量如下:/n");   
-     printf("   A B C/n");   
-     printf("   ");   
-     for(i=0;i<RN;i++)   
-     {   
-         printf("%d ",Available[i]);   
-     }      
-     printf("/n");   
- }   
-   
-   
- int Banker(int i,int p[])   
- {   
-     int Available[RN]={3,3,2};  
-     int Allocation[PN][RN]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};  
-                                                               
-     int Need[PN][RN]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};  
-     int Requist[RN];   
-     for(int m=0;m<RN;m++)   
-     {   
-         Requist[m]=p[m];   
-     }   
-     int j;   
-     bool flag1=1;  
-     bool flag2=1;   
-     bool flag3=1;   
-     for(j=0;j<RN;j++)   
-     {   
-         if(Requist[j]>Need[i][j])   
-         {   
-             flag1=0;   
-             printf("进程%d需要的资源已超过它宣布的最大值!",i);   
-             break;   
-         }   
-     }   
-     if(flag1)   
-     {   
-         for(j=0;j<RN;j++)   
-         {   
-             if(Requist[j]>Available[j])   
-             {   
-                 flag2=0;   
-                 printf("没有足够的资源,进程%d必须等待。",i);   
-                 break;   
-             }   
-         }   
-         if(flag2)   
-         {   
-             for(j=0;j<RN;j++)  
-             {   
-                 Available[j]=Available[j]-Requist[j];   
-                 Allocation[i][j]=Allocation[i][j]+Requist[j];   
-                 Need[i][j]=Need[i][j]-Requist[j];   
-             }   
-             flag3=Security(Available,Need,Allocation);  
-             if(flag3)  
-             {   
-                 return 1;   
-             }   
-             else  
-             {   
-                   
-                 for(j=0;j<RN;j++)   
-                 {   
-                     Available[j]=Available[j]+Requist[j];   
-                     Allocation[i][j]=Allocation[i][j]-Requist[j];   
-                     Need[i][j]=Need[i][j]+Requist[j];      
-                 }   
-             }   
-         }   
-     }   
-     return 0;   
- }    
-   
-   
- bool Security(int Available[],int Need[][RN],int Allocation[][RN])   
- {   
-     int bian;   
-     bool flag1,flag2;   
-     flag1=true;   
-     int m,n;   
-     int Work[RN];   
-     for(m=0;m<RN;m++)   
-     {   
-         Work[m]=Available[m];   
-     }   
-     bool Finish[PN]={0,0,0,0,0};   
-     while(flag1)   
-     {   
-         bian=0;   
-         for(m=0;m<PN;m++)   
-         {   
-             flag2=true;   
-             if(!Finish[m])   
-             {   
-                 for(n=0;n<RN;n++)   
-                 {   
-                     if(Need[m][n]>Work[n])   
-                     {   
-                         flag2=0;   
-                         break;   
-                     }   
-                 }   
-                 if(flag2)   
-                 {   
-                     bian=1;   
-                     for(n=0;n<RN;n++)   
-                     {   
-                         Work[n]=Work[n]+Allocation[m][n];   
-                     }   
-                     printf("p%d/t",m);   
-                     Finish[m]=true;   
-                 }   
-             }   
-         }   
-         if(bian==0)   
-         {   
-             flag1=0;   
-         }   
-     }   
-     return 1;   
- }