2.cpp

来自「银行家算法可以避免死锁。算法结构 n : 系统中进程个数 m :系统中的」· C++ 代码 · 共 56 行

CPP
56
字号
#include <stdio.h>
void main()
{
 int claim[5][3] = {{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}}; //每个进程运行申请的总资源
 int allocation[5][3] = {{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}}; //已经分配给每个进程的资源数
 int p,s = 0; //p 代表进程id   s 代表资源的种类
 int count=0; //每一个进程成功分配自动加一
 int need[5][3] = {{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}}; //进程还需要的每种资源数
 int result[5] = {-1,-1,-1,-1,-1}; //进程是否得到了满足
 int work[3] = {3,3,2}; //假设每次分配资源后,还余下的资源数
 printf("all source:\n     A  B  C\n     10 5  7\n");
 printf("available:\n     A  B  C\n     3  3  2\n");
 printf("every max source:\n     A  B  C\n");
 for(p=0;p<5;p++)
 {
  printf("P%d: ",p);
  for(s=0;s<3;s++)
  {
   printf(" %d ",claim[p][s]);
   need[p][s]=claim[p][s]-allocation[p][s]; //已经计算出了每个进程还需的资源数
  }
  printf("\n");
 }
  printf("allocation:\n     A  B  C\n");// 已经分配给各个进程的资源数目
  for(p=0;p<5;p++){
  printf("P%d: ",p);
  for(s=0;s<3;s++)
  printf(" %d ",allocation[p][s]);
  printf("\n");
 }
 printf("every need:\n     A  B  C\n");// 打印出每个进程还需的资源书目
 for(p=0;p<5;p++){
  printf("P%d: ",p);
  for(s=0;s<3;s++)
  printf(" %d ",need[p][s]);
  printf("\n");
 }

 for(s=0;s<5;s++)
 for(p=0;p<5;p++){
  if(result[p]==-1&&need[p][0]<=work[0]&&need[p][1]<=work[1]&&need[p][2]<=work[2]){
   work[0]=work[0]+allocation[p][0];
      work[1]=work[1]+allocation[p][1];
   work[2]=work[2]+allocation[p][2];
      result[p]=s;count++;
   printf("P%d->",p);
  }
 }

 if(count==5)
  printf("\nit is safe!\n");
 else
  printf("\nit is danger\n");
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?