Touch_2011 发表于 2013-2-1 11:21:28

银行家算法(C 语言实现)

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