银行家算法c银行家算法的C语言程序

银行家算法c  时间:2022-02-23  阅读:()

银行家算法的C语言程序

#include <stdio.h> #define  n  5          //进程个数 #define  m  3            //资源种类 #define false 0 #define true 1 int Available[m]={2,3,3},Allocation[n+1][m]={0,0,0,2,1,2,4,0,2,3,0,5,2,0,4,3,1,4},Need[n+1][m]={0,0,0,3,4,7,1,3,4,0,0,3,2,2,1,1,1,0};//可利用资源向量Available 最大需求矩阵Max分配矩阵Allocation需求矩阵Need int Available1[m],Need1[n][m],Allocation1[n][m]; int h; int safede()                                                    //安全状态判别算法 {  int i,j,work[m],finish[n],tag=n;  for(i=0;i<m;i++)work[i]=Available1[i];  for(i=0;i<n;i++)finish[i]=0;     while(tag--)  {    for(i=0;i<n;i++)    {          if(finish[i]==0)    {     for(j=0;j<m;j++)if(Need1[h][j]<=work[j])continue;     if(j==m)     {      for(j=0;j<m;j++)     {      work[j]=work[j]+Allocation1[h][j];                     finish[j]=1;     }     }    }    }  }  for(i=0;i<n;i++)if(finish[i]==1)continue;  if(i==n)return 1;  else return 0; } int main() {      int i,j,request[m];      while(1)   { printf("输入进程类型: P = ");   scanf("%d",&h);   printf("输入请求资源向量: ");      for(i=0;i<m;i++)scanf("%d",&request[i]);   for(i=0;i<m;i++)  {         Available1[i]=Available[i];         Allocation1[h][i]=Allocation[h][i];         Need1[h][i]=Need[h][i];  }       for(i=0;i<m;i++)   {   if (!(request[i]<=Need[h][i]))   {             printf("非法请求!!! ");        break;                                    //非法请求,终止   }   }     if(i==m)  {   for(i=0;i<m;i++)   {             if (!(request[i]<=Available[i]))    {                 printf("P%d阻塞!!! ",h);     break;                            //进程阻塞,终止    }   }  }  if(i==m)  {          for(i=0;i<m;i++)                                      //试探性分配   {    Available1[i]=Available1[i] - request[i];             Allocation1[h][i]=Allocation1[h][i]+request[i];             Need1[h][i]=Need1[h][i]-request[i];   } if(safede()==0) printf("资源分配后系统不是处于安全状态! ");    //若新状态安全,则实际分配资源给Pi,否则取消试探性分配    else   {     printf("资源分配成功! ");    for(i=0;i<m;i++)    {     Available[i]=Available1[i];     Allocation[h][i]=Allocation1[h][i];     Need[h][i]=Need1[h][i];    }   }  }   printf("可利用资源: ");   for(i=0;i<m;i++)printf("%d ",Available[i]);   printf(" 分配资源: ");   for(i=1;i<=n;i++)   {    for(j=0;j<m;j++)     printf("%d ",Allocation[i][j]);    printf(" ");   }   printf("需求矩阵: ");      for(i=1;i<=n;i++)   {    for(j=0;j<m;j++)     printf("%d ",Need[i][j]);    printf(" ");   }   printf("请求结束! ");         printf(" ");   }   return 0; }

ReliableSite怎么样,月付$95美国洛杉矶独立服务器

ReliableSite怎么样?ReliableSite好不好。ReliableSite是一家成立于2006年的老牌美国商家,主要经营美国独立服务器租赁,数据中心位于:洛杉矶、迈阿密、纽约,带宽1Gbps起步,花19美元/月即可升级到10Gbps带宽,月流量150T足够各种业务场景使用,且免费提供20Gbps DDoS防护。当前商家有几款大硬盘美国独服,地点位于美国洛杉矶或纽约机房,机器配置很具有...

数脉科技香港自营,10Mbps CN2物理机420元/月

数脉科技怎么样?数脉科技品牌创办于2019,由一家从2012年开始从事idc行业的商家创办,目前主营产品是香港服务器,线路有阿里云线路和自营CN2线路,均为中国大陆直连带宽,适合建站及运行各种负载较高的项目,同时支持人民币、台币、美元等结算,提供支付宝、微信、PayPal付款方式。本次数脉科技给发来了新的7月促销活动,CN2+BGP线路的香港服务器,带宽10m起,配置E3-16G-30M-3IP,...

免费注册宝塔面板账户赠送价值3188礼包适合购买抵扣折扣

对于一般的用户来说,我们使用宝塔面板免费版本功能还是足够的,如果我们有需要付费插件和专业版的功能,且需要的插件比较多,实际上且长期使用的话,还是购买付费专业版或者企业版本划算一些。昨天也有在文章中分享年中促销活动。如今我们是否会发现,我们在安装宝塔面板后是必须强制我们登录账户的,否则一直有弹出登录界面,我们还是注册一个账户比较好。反正免费注册宝塔账户还有代金券赠送。 新注册宝塔账户送代金券我们注册...

银行家算法c为你推荐
implement_dynamic(VC++)DECLARE_DYNAMIC(CDrawToolDlg)这个是什么意思?短信营销方案短信平台应该如何推广和运营啊?动态图片格式动态图片是什么格式?broadcast播播……拼音上行宽带上行宽带是什么?shoujiao黑鲨手机SKW一AO怎么解锁?java程序员招聘java工程师待遇如何全局钩子delphi 键盘全局钩子云办公平台Gleasy云办公平台解决了哪些问题?怎样删除聊天记录如何删除和一个人的聊天记录?
如何注册网站域名 七牛优惠码 东莞电信局 冰山互联 荷兰服务器 web服务器架设软件 大容量存储 国外代理服务器地址 域名和空间 南通服务器 免费申请个人网站 美国网站服务器 绍兴电信 台湾谷歌 网页加速 空间服务器 cdn服务 贵州电信 cx域名 linux服务器系统 更多