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 + -
显示快捷键?