您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 金融资料 > 操作系统-银行家算法C语言实现
银行家算法C语言实现以下便是代码实现#includestdio.h#includestdlib.h#includestring.hintn,m;structinfo{intclaim[50];intallocation[50];intneed[50];}pro[50];intavailable[50];intrequest[50];voidinit(){inti,j;printf(请输入资源种类数:);scanf(%d,&n);for(i=0;in;i++){printf(请输入第%d个资源的最大资源数:\n,i);scanf(%d,&available[i]);}printf(请输入进程数:);scanf(%d,&m);printf(请输入各进程对各资源的最大需求数:\n);for(i=0;im;i++){printf(请输入第%d进程对各资源的最大需求数:\n,i);for(j=0;jn;j++){scanf(%d,&pro[i].claim[j]);pro[i].allocation[j]=0;pro[i].need[j]=pro[i].claim[j];}}printf(\n);}intsafe(){intwork[101];intfinish[101];intxulie[101];inti,j,k,w=0;intflag=1,t=0;for(i=0;im;i++)finish[i]=0;for(i=0;in;i++)work[i]=available[i];for(i=0;im;i++){for(j=0;jm;j++){if(finish[j]==0){for(k=0;kn;k++){if(flag==1&&work[k]=pro[j].need[k])flag=1;elseflag=0;}if(flag==1){for(k=0;kn;k++)work[k]=work[k]+pro[j].allocation[k];finish[j]=1;xulie[w++]=j;}flag=1;}}}for(i=0;im;i++)if(finish[i]==0)break;if(im){printf(系统是不安全的,进程等待,请重新输入进程\n);return0;}else{printf(系统是安全的。\n安全序列为:);for(i=0;im-1;i++)printf(%d--,xulie[i]);printf(%d\n,xulie[m-1]);return1;}}voidallo(){inti,j;printf(请输入申请资源的进程号:\n);scanf(%d,&i);printf(请输入请求资源数量:\n);for(j=0;jn;j++){printf(资源%d:,j);scanf(%d,&request[j]);if(request[j]pro[i].need[j]){printf(进程%d申请的资源数大于它所需要的%d类资源数,请重新输入.\n,i,j);j=j-1;continue;}elseif(request[j]available[j]){printf(进程%d申请的资源数大于剩余的%d类资源数,请重新输入.\n,i,j);j=j-1;continue;}}for(j=0;jn;j++){available[j]=available[j]-request[j];pro[i].allocation[j]=pro[i].allocation[j]+request[j];pro[i].need[j]=pro[i].need[j]-request[j];}if(safe()==1)printf(请求分配成功!\n);else{printf(请求分配被拒绝!\n);for(j=0;jn;j++){available[j]=available[j]+request[j];pro[i].allocation[j]=pro[i].allocation[j]-request[j];pro[i].need[j]=pro[i].need[j]+request[j];}}}main(){inti;init();do{printf(选择1--用银行家算法;选择0--退出);scanf(%d,&i);if(i==1)allo();}while(i==1);}
本文标题:操作系统-银行家算法C语言实现
链接地址:https://www.777doc.com/doc-4185632 .html