银行家算法(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]