首页 > 代码库 > 银行家算法
银行家算法
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 using namespace std; 5 int work,progress,available[100],mmax[100][100],allocation[100][100],need[100][100]; 6 int p[100]; 7 void init() 8 { 9 int i,j; 10 printf("请输入多少系统资源数\n"); 11 scanf("%d",&work); 12 printf("请输入总共有多少进程\n"); 13 scanf("%d",&progress); 14 for(i=1;i<=work;i++) 15 { 16 printf("第%d类资源有的资源实例:",i); 17 scanf("%d",&available[i]); 18 } 19 for(i=1;i<=progress;i++) 20 for(j=1;j<=work;j++) 21 { 22 printf("进程p[%d]当前分配第%d类资源数: ",i,j); 23 scanf("%d",&allocation[i][j]); 24 } 25 int sum; 26 for(j=1;j<=work;j++) 27 { 28 sum=0; 29 for(i=1;i<=progress;i++) 30 { 31 sum+=allocation[i][j]; 32 33 } 34 available[j]-=sum; 35 } 36 for(i=1;i<=progress;i++) 37 for(j=1;j<=work;j++) 38 { 39 printf("进程p[%d]对第%d类资源的最大需求量: ",i,j); 40 scanf("%d",&mmax[i][j]); 41 } 42 for(i=1;i<=progress;i++) 43 for(j=1;j<=work;j++) 44 { 45 need[i][j]=mmax[i][j]-allocation[i][j]; 46 } 47 printf("当前的状态:\n"); 48 printf(" Max Allocation Need\n"); 49 printf("进程"); 50 for(i=1;i<=3;i++) 51 { 52 for(j=1;j<=work;j++) 53 printf(" %d类",j); 54 } 55 for(i=1;i<=progress;i++) 56 { 57 printf("\nP[%d]",i); 58 for(j=1; j<=work; j++) 59 { 60 printf(" %d ",mmax[i][j]); 61 } 62 for(j=1; j<=work; j++) 63 { 64 printf(" %d ",allocation[i][j]); 65 } 66 for(j=1; j<=work; j++) 67 { 68 printf(" %d ",need[i][j]); 69 } 70 } 71 printf("\n\n系统剩余资源量: "); 72 for(i=1; i<=work; i++) 73 { 74 printf(" %d ",available[i]); 75 } 76 printf("\n"); 77 } 78 bool safe() 79 { 80 int w[100],finish[100],i,j,k,l=0; 81 memset(finish,0,sizeof(finish)); 82 for(i=1;i<=work;i++) 83 w[i]=available[i]; 84 printf("\n"); 85 for(i=1;i<=progress;i++) 86 { 87 if(finish[i]==1) 88 continue; 89 for(j=1;j<=work;j++) 90 { 91 if(need[i][j]>w[j]) 92 break; 93 } 94 if(j==work+1) 95 { 96 finish[i]=1; 97 for(k=1;k<=work;k++) 98 w[k]+=allocation[i][k]; 99 p[l++]=i;100 i=0;101 }102 else103 continue;104 if(l==progress)105 {106 printf("系统是安全的\n");107 printf("安全序列:\n");108 for(i=0;i<l;i++)109 {110 printf("%d",p[i]);111 if(i!=l-1) //最后一项不输-->112 {113 printf("-->");114 }115 }116 printf("""\n");117 return true;118 }119 }120 printf("系统是不安全的\n");121 return false;122 }123 void Request()124 {125 int m,i,request[100],flag=0,j;126 printf("请输入申请资源的进程:");127 scanf("%d",&m);128 for(i=1;i<=work;i++)129 {130 printf("请输入进程p[%d]对%d类资源的申请量:",m,i);131 scanf("%d",&request[i]);132 }133 for(j=1;j<=work;j++)134 {135 if(request[j]>need[m][j])136 {137 flag=1;138 }139 }140 if(flag)141 printf("请求的资源数超过了需求的最大值\n");142 else143 {144 for(j=1;j<=work;j++)145 if(request[j]>available[j])146 flag=1;147 if(flag)148 printf("尚无足够资源,P[%d]须等待\n",m);149 else150 {151 for(j=1;j<=work;j++)152 {153 available[j]=available[j]-request[j];154 allocation[m][j]=allocation[m][j]+request[j];155 need[m][j]=need[m][j]-request[j];156 }157 printf("\n");158 if(safe())159 {160 printf("可以分配给进程p[%d]\n",m);161 }162 else163 {164 printf("aaa\n");165 printf("让进程p[%d]等待",m);166 for(j=1;j<=work;j++)167 {168 available[j]=available[j]+request[j];169 allocation[m][j]=allocation[m][j]-request[j];170 need[m][j]=need[m][j]+request[j];171 }172 }173 }174 }175 176 }177 int main()178 {179 int cas;180 printf("★★★★★★★★欢迎使用本程序★★★★★★★★\n");181 printf("\n\n");182 init();183 for(;;)184 {185 Request();186 printf("输入0程序运行结束,输入其他继续执行");187 scanf("%d",&cas);188 if(cas==0)189 break;190 }191 return 0;192 }
银行家算法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。