|
|
这个程序局限性很大,只是为了熟悉一下银行家算法而已,所以随便写写罗。。。
#include<stdio.h>#define PROCESS_AMOUNT 5 //进程数量#define RESOURCE_AMOUNT 3 //资源数量//系统提供的各类资源的最大量int Resoure_Max[3]={10,5,7}; //各个进程需要的最大资源数量int Max[PROCESS_AMOUNT][RESOURCE_AMOUNT]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3},}; //以分配给每个进程的资源数量 int Allocation[PROCESS_AMOUNT][RESOURCE_AMOUNT]={{0,1,0},{2,0,2},{3,0,2},{2,1,1},{0,0,2},}; //各个进程还需要的资源数量int Need[PROCESS_AMOUNT][RESOURCE_AMOUNT]; //工作向量,表示系统可提供的资源数量 int Work[RESOURCE_AMOUNT]; //记录各个进程是否完成,0表示未完成,1表示完成 int Finish[PROCESS_AMOUNT]={0}; //记录各个进程执行完成的顺序 int Sort[PROCESS_AMOUNT]; //判断是否安全,即寻找安全序列int is_safe();//在Need矩阵中查找是否所需的各个资源数量都小于Work数组的资源数量,查找成功返回下标,不成功返回一个负数int search_need();void main() {int i,j;Work[0]=Resoure_Max[0];Work[1]=Resoure_Max[1];Work[2]=Resoure_Max[2]; for(i=0;i<PROCESS_AMOUNT;i++)for(j=0;j<RESOURCE_AMOUNT;j++){ Need[i][j]=Max[i][j]-Allocation[i][j]; if(j==0) Work[j]-=Allocation[i][j]; else if(j==1) Work[j]-=Allocation[i][j]; else if(j==2) Work[j]-=Allocation[i][j];}if(is_safe()){printf("找到这样的安全系列:\n"); for(i=0;i<PROCESS_AMOUNT;i++)printf("%-3d",Sort[i]);printf("\n");}elseprintf("此时刻不安全!!\n");}//判断是否安全,即寻找安全序列int is_safe(){int i,index,j;for(i=0;i<PROCESS_AMOUNT;i++){index=search_need();if(index<0)return 0; else{ for(j=0;j<RESOURCE_AMOUNT;j++) Work[j]+=Allocation[index][j];Finish[index]=1; Sort[i]=index;}}return 1;}//在Need矩阵中查找是否所需的各个资源数量都小于Work数组的资源数量,查找成功返回下标,不成功返回一个负数int search_need(){int i,j;for(i=0;i<PROCESS_AMOUNT;i++){if(Finish[i]==1)continue;for(j=0;j<RESOURCE_AMOUNT;j++)if(Need[i][j]>Work[j])break;if(j==RESOURCE_AMOUNT) return i;}return -1;} |
|