银行家算法

#include <stdio.h>
#include<string.h>struct yhjsf{int max[4];int allocation[4];int need[4];char name[20];char finsh;};struct yhjsf p[10];int main(){int i,j=0,a,b,c,available[20],request[20],newwork[20],xx,k=0,available1[20];//a表示资源的种类数,b表示进程的数量。char y;printf(“Input the type of resource and number of customer:\n”);scanf("%d%d",&a,&b);printf(“Input the amount of resource (maximum , allocated) of each customer:\n”);for(i=0;i<b;i++){printf(“p[%d] “,i);p[i].finsh=‘F’;for(j=0;j<a;j++){scanf(”%d,”,&p[i].max[j]); }//输入这些maxfor(j=0;j<a;j++){scanf("%d,",&p[i].allocation[j]); p[i].need[j]=p[i].max[j]-p[i].allocation[j];}//输入已分配的 } printf(“Input the amout of resources(available):”); for(i=0;i<a;i++){ scanf("%d,",&available[i]); available1[i]=available[i];}//输入可分配的printf(“available%d”,available1[0]);printf(“1、judge the system security\n2、judge the request security\n3quit\n”);do{printf(“输入选项数字:\n”);scanf("%d",&xx);switch(xx){case 1 :{printf(“Name Work Need Allocation Work+ Allocation Finish\n”); for(i=0;i<b;i++){ j=-1; do{j++;}while(available[j]>=p[i].need[j]&&j<a);if(ja&&p[i].finsh!=‘T’){p[i].finsh=‘T’;for(j=0;j<a;j++){newwork[j]=available[j]+p[i].allocation[j];}//work+allocationprintf(“p[%d] “,i);for(j=0;j<a;j++){printf(”%d “,available[j]);}printf(” “);for(j=0;j<a;j++){printf(”%d “,p[i].need[j]);}printf(” “);for(j=0;j<a;j++){printf(”%d “,p[i].allocation[j]);}printf(” “);for(j=0;j<a;j++){printf(”%d “,newwork[j]);}printf(” “);printf(”%c\n”,p[i].finsh) ;for(j=0;j<a;j++){available[j]=newwork[j];}//新的avaliablek++;//用来判断是不是这b个进程都可以变成Ti=-1;//直接重新开始再找,此时i直接回进行i++的操作,所以应该让i=-1。}}if(kb){printf(“SYSTEM SECURITY!!!\n”);}else{printf(“SYSTEM NOT SECURITY!!!”);};//安全算法的检测break; }case 2:{printf(“Please input the customer’s name and request\n”);printf(“p”);scanf("%d",&i);c=i;for(j=0;j<a;j++){ scanf("%d,",&request[j]); available[j]=available1[j];//available重置回去 }j=-1;do{ j++;}while(available[j]>=request[j]&&request[j]<=p[i].need[j]);//判断了有资源让他分配并且,request不会大于所需要的资源.if(j>=a){ for(j=0;j<a;j++){ available[j]=available1[j]-request[j]; p[i].need[j]=p[i].need[j]-request[j]; p[i].allocation[j]=p[i].allocation[j]+request[j]; } for(i=0;i<b;i++){ p[i].finsh=‘F’;//重置finsh因为上个已经将分手变为1了。 } k=0;//重置k for(i=0;i<b;i++){ j=-1; do{j++; }while(available[j]>=p[i].need[j]&&j<a); if(ja&&p[i].finsh!=‘T’){ p[i].finsh=‘T’; for(j=0;j<a;j++){ newwork[j]=available[j]+p[i].allocation[j]; }//work+allocation printf(“p[%d] “,i); for(j=0;j<a;j++){ printf(”%d “,available[j]); } printf(” “); for(j=0;j<a;j++){ printf(”%d “,p[i].need[j]); } printf(” “); for(j=0;j<a;j++){ printf(”%d “,p[i].allocation[j]); } printf(” “); for(j=0;j<a;j++){ printf(”%d “,newwork[j]); } printf(” “); printf(”%c\n”,p[i].finsh) ; for(j=0;j<a;j++){ available[j]=newwork[j]; }//新的avaliable k++;//用来判断是不是这b个进程都可以变成T i=-1;//直接重新开始再找,此时i直接回进行i++的操作,所以应该让i=-1。 } }if(kb){printf(“SYSTEM SECURITY!!!\nCUSTOMER P%d CAN GET RESOURCES IMMEDIATELY\n”,c);}else{printf(“RESOURCE INSECURITY!!!\nCUSTOMER P%d CAN NOT OBTAIN RESOURCES IMMEDIATELY\n”,c);};for(j=0;j<a;j++){p[c].need[j]=p[c].need[j]+request[j];p[c].allocation[j]=p[c].allocation[j]-request[j];} }else{printf(“RESOURCE INSECURITY!!!\nCUSTOMER P%d CAN NOT OBTAIN RESOURCES IMMEDIATELY\n”,c);};}//重置变化的数据break;case 3:break; }}while(xx!=3);}在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值