100行C++代码实现银行家算法
【100行C++代码实现银行家算法】1、实现流程图
文章图片
2、代码实现
#include
using namespace std;
int main()
{
int r, p;
//资源总数、进程数
bool is_security_all=true;
//判断是否存在安全进程
bool is_security_process = true;
//判断当前进程是否安全
bool is_test;
//判断当前进程是否已经被检测
int process_test=0;
//已经被检测的进程数
cout << "请输入资源总数、进程数:" << endl;
cin >> r >> p;
/*定义一个一维数组用来存放当前可用资源数*/
int* available = new int[r];
/*定义一个二维数组用来存放每个进程所需得最大资源数*/
int** max = new int* [p];
for (int i = 0;
i < p;
i++)
max[i]= new int[r];
/*定义一个二维数组用来存放每个进程已分配的资源数*/
int** allocation = new int* [p];
for (int i = 0;
i < p;
i++)
allocation[i] = new int[r];
/*定义一个二维数组用来存放每个进程需求的资源数*/
int** need = new int* [p];
for (int i = 0;
i < p;
i++)
need[i] = new int[r];
/*定义一个一维数组用来存放当前安全序列中各种资源的个数*/
int* work = new int[r];
/*定义一个一维数组来记录安全序列*/
int* path = new int[p];
cout << "请输入已分配给每个进程的各种资源数" << endl;
;
for (int i = 0;
i < p;
i++)
for (int j = 0;
j < r;
j++)
cin >> allocation[i][j];
cout << "请输入每个进程所需的最大各种资源数" << endl;
;
for (int i = 0;
i < p;
i++)
for (int j = 0;
j < r;
j++)
cin >> max[i][j];
cout << "请输入当前系统剩余的各种资源数" << endl;
for (int i = 0;
i < r;
i++)
cin >> available[i];
/*每个进程需求的资源数*/
for (int i = 0;
i < p;
i++)
for (int j = 0;
j < r;
j++)
need[i][j] = max[i][j] - allocation[i][j];
/*检测是否存在安全序列*/
for (int i = 0;
i < r;
i++)//当前安全序列中各种资源的总数
work[i] = available[i];
int iterator;
//每次检测一个安全进程的迭代变量
while (process_test < p&&is_security_all==true)//序列安全且所有进程还未检测完毕
{
for ( iterator = 0;
iterator < p;
iterator++)//查找哪一个进程还未被检测,且每次检测一个安全进程
{
is_security_process = true;
//假设当前进程是安全的
is_test = false;
//假设当前进程还未被检测
for (int j = 0;
j < process_test;
j++)//确认是否被检测过了
if (path[j] == iterator)
{
is_test = true;
break;
}
if (is_test == false)//如果未被检测过
{for (int z = 0;
z < r;
z++)//检测当前进程是否安全
if (need[iterator][z] > work[z])
{
is_security_process = false;
break;
}
if (is_security_process == true)//如果当前进程安全,将其加入安全序列中
{
path[process_test] = iterator;
process_test++;
for (int y = 0;
y < r;
y++)//更新当前序列各种资源的work值
work[y] += allocation[iterator][y];
break;
//中断此次安全进程检测
}
}
}
if (iterator == p&&process_test
3、程序运行结果
存在安全序列:
文章图片
不存在安全序列:
文章图片
推荐阅读
- CVE-2020-16898|CVE-2020-16898 TCP/IP远程代码执行漏洞
- opencv|opencv C++模板匹配的简单实现
- 不废话,代码实践带你掌握|不废话,代码实践带你掌握 强缓存、协商缓存!
- 工具|后天就是七夕节,你准备好了吗(送上几个七夕代码,展示你技能的时候到了!)
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- 《机器学习实战》高清中文版PDF英文版PDF+源代码下载
- 霍兰德职业代码对照表
- Hexo代码块前后空白行问题
- c++基础概念笔记
- 前端代码|前端代码 返回顶部 backToTop