#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);}
银行家算法
最新推荐文章于 2022-09-17 11:16:08 发布