资源描述:
《银行家算法可用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、#include#include#include#definetrue1//定义ture=1#definefalse0//定义false=0intAvailable[10];//可使用资源向量intMax[10][10];//最大需求矩阵intAllocation[10][10]={0};//分配矩阵intNeed[10][10]={0};//需求矩阵intWork[10];//工作向量intFinish[10];//状态标志intRequest[10][10];//进程申请资源向量intPause[10]
2、;intList[10];inti,j;intn;//系统资源总数intm;//总的进程数inta;//当前申请的进程号intl,e;//计数器intb=0,c=0,f=0,g;//计数器voidenter()//输入部分{printf("请输入系统总共有的资源数:");scanf("%d",&n);printf("请输入总共有多少个进程:");scanf("%d",&m);for(i=1;i<=n;i++){printf("第%d类资源有的资源实例:",i);scanf("%d",&Available[i]);}for(i=1;i<=m;i++){for(j=
3、1;j<=n;j++){printf("进程P[%d]对第%d类资源的最大需求量:",i,j);scanf("%d",&Max[i][j]);Need[i][j]=Max[i][j];}}}voidrequest()//进程提出新申请{printf("请输入申请资源的进程:");scanf("%d",&a);for(i=1;i<=n;i++){printf("请输入进程P[%d]对%d类资源的申请量:",a,i);scanf("%d",&Request[a][i]);if(Request[a][i]>Need[a][i])printf("出错!进程申请的资源
4、数多于它自己申报的最大量");if(Request[a][i]>Available[i])printf("P[%d]必须等待",a);//以下是试探性分配Available[i]=Available[i]-Request[a][i];Allocation[a][i]=Allocation[a][i]+Request[a][i];Need[a][i]=Need[a][i]-Request[a][i];Work[i]=Available[i];}for(i=1;i<=m;i++){Pause[i]=Available[i];//Pause[i]只是一个暂
5、时寄存的中间变量,为防止在下面//安全性检查时修改到Available[i]而代替的一维数组Finish[i]=false;}for(g=1;g<=m;g++){for(i=1;i<=m;i++){b=0;//计数器初始化for(j=1;j<=n;j++){if(Need[i][j]<=Pause[j]){b=b+1;}if(Finish[i]==false&&b==n){for(l=1;l<=n;l++){Pause[l]=Pause[l]+Allocation[i][l];}Finish[i]=true;printf("$$%d",i);//依次输出进程安全
6、序列之一中每个元素}}}}printf("");for(i=1;i<=m;i++){if(Finish[i]==true)f=f+1;//统计Finish[i]==true的个数}if(f==m){printf("safestatic");f=0;//将计数器f重新初始化,为下一次提出新的进程申请做准备}else{printf("unsafestatic");//以下代码为当系统被判定为不安全状态时//返回提出申请前的状态for(i=1;i<=n;i++){Available[i]=Available[i]+Request[a][i];Allocation[
7、a][i]=Allocation[a][i]-Request[a][i];Need[a][i]=Need[a][i]+Request[a][i];}}}voidprint(){printf("当前的系统状态");printf("目前占有量最大需求量尚需要量进程");for(i=1;i<=n;i++)for(j=1;j<=n;j++){printf("%d类",j);}for(i=1;i<=m;i++){printf("P[%d]",i);for(j=1;j<=n;j++){printf("%d",Allocation[i][j]);}for(j=1;
8、j<=n;j++){pr