如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
#include"stdio.h"#include"stdlib.h"#include"string.h"intn,m;structinfo{intclaim[50];intallocation[50];intneed[50];}pro[50];intavailable[50];intrequest[50];voidinit(){inti,j;printf("请输入资源种类数:");scanf("%d",&n);for(i=0;i<n;i++){printf("请输入第%d个资源的最大资源数:\n",i);scanf("%d",&available[i]);}printf("请输入进程数:");scanf("%d",&m);printf("请输入各进程对各资源的最大需求数:\n");for(i=0;i<m;i++){printf("请输入第%d进程对各资源的最大需求数:\n",i);for(j=0;j<n;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;i<m;i++)finish[i]=0;for(i=0;i<n;i++)work[i]=available[i];for(i=0;i<m;i++){for(j=0;j<m;j++){if(finish[j]==0){for(k=0;k<n;k++){if(flag==1&&work[k]>=pro[j].need[k])flag=1;elseflag=0;}if(flag==1){for(k=0;k<n;k++)work[k]=work[k]+pro[j].allocation[k];finish[j]=1;xulie[w++]=j;}flag=1;}}}for(i=0;i<m;i++)if(finish[i]==0)break;if(i<m){printf("系统是不安全的,进程等待,请重新输入进程\n");return0;}else{printf("系统是安全的。\n安全序列为:");for(i=0;i<m-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;j<n;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;j<n;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;j<n;j++){available[j]=available[j]+request[j];pro[i].allocati