c++银行家算法
#include <iostream>
#include<string>
#define False 0
#define True 1
using namespace std;
] = { }; //系统->拥有资源
][] = { }; //进程->共需要
][] = { }; //进程->已得到
][] = { }; //进程->还需要
] = { }; //模拟->系统->拥有资源
//int Request[100] = { 0 }; //进程->请求资源 0.0貌似后来没用到
] = { }; //资源名称。界面使用
] = { }; //存放安全序列
; //进程的最大数为
; //资源的最大数为
void showdata(); //显示资源矩阵
int safe(); //安全性算法
int main()//主函数
{
, m, n, flag;
char ming;
//------------------------------------------------------------->>>>>>>> 【界面】 >>>
cout << "\t*-----------------------------------------------------*" << endl;
cout << "\t|| ||" << endl;
cout << "\t|| 银行家算法实现 ||" << endl;
cout << "\t|| ||" << endl;
cout << "\t|| 张金棒 ||" << endl;
cout << "\t|| ||" << endl;
cout << "\t|| 2016.06.29 ||" << endl;
cout << "\t|| ||" << endl;
cout << "\t*-----------------------------------------------------*" << endl;
//------------------------------------------------------------->>>>>>>> 【初始化】 >>>
cout << "请先输入系统可供资源种类的数量:";
cin >> n;
N = n;
; i < n; i++)
{
cout << << "的名称:";
cin >> ming;
name[i] = ming;
cout << "资源的数量:";
cin >> number;
Avaliable[i] = number;
}
cout << endl;
cout << "请输入作业的数量";
cin >> m;
M = m;
cout << "请输入各进程的最大需求量(" << m << "*" << n << "矩阵)[Max]:" << endl;
; i < m; i++)
; j < n; j++)
cin >> Max[i][j];
do
{
flag = ;
cout << "请输入各进程已经申请的资源量(" << m << "*" << n << "矩阵)[Allocation]:" << endl;
; i < m; i++)
; j < n; j++)
{
cin >> Allocation[i][j];
;
Need[i][j] = Max[i][j] - Allocation[i][j];
Avaliable[j] = Avaliable[j] - Allocation[i][j];
}
if (flag)
cout << "申请的资源大于最大需求值,请重新输入!\n";
} while (flag);
showdata();//显示各种资源
safe();//用银行家算法判定系统是否安全
system("pause");
;
}
//------------------------------------------------------------->>>>>>>> 【界面·显示资源矩阵】 >>>
void showdata()
{
int i, j;
cout << "系统当前可用资源[Avaliable]:" << endl;
; i < N; i++)
cout << name[i] << " ";
cout << endl;
; j < N; j++)
cout << Avaliable[j]<<" ";
cout << endl;
cout << " Max Allocation Need" << endl;
cout << "process ";
; j < ; j++)
{
; i < N; i++)
cout << name[i] << " ";
cout << " ";
}
cout << endl;
; i < M; i++)
{
cout << " " << i << " ";
; j < N; j++)
cout << Max[i][j] << " ";
cout << " ";
; j < N; j++)
cout << Allocation[i][j] << " ";
cout << " ";
; j < N; j++)
cout << Need[i][j] << " ";
cout << endl;
}
}
//------------------------------------------------------------->>>>>>>> 【银行家算法】 >>>
int safe()
{
, m, apply, Finish[] = { }; //apply [应用,使用]
int j;
; i < N; i++)
{
Work[i] = Avaliable[i];
}
; i < M; i++)//------------------------------------->>>>>>>>>>选定进程 i
{
apply = ;
; j < N; j++)//--------------------------------->>>>>>>>>>选定资源 j
{
if (Finish[i] == False&&Need[i][j] <= Work[j])//------>>>>>>>>>>第i个进程j类所需资源小于系统拥有的资源
{
apply++;
if (apply == N)//--------------------------------->>>>>>>>>>当i进程各类资源都满足后
{
; m < N; m++)
Work[m] = Work[m] + Allocation[i][m];//--->>>>>>>>>>分配其资源使其运行结束然后回收资源
Finish[i] = True;//--------------------------->>>>>>>>>>i进程执行完毕
temp[k] = i;//-------------------------------->>>>>>>>>>写入进程号到序列中
i = -;//------------------------------------->>>>>>>>>>检查前面的是否有可满足的
k++;//---------------------------------------->>>>>>>>>>准备好写下一个安全序列项
}
}
}
}
; i < M; i++)
{
if (Finish[i] == False)
{
cout << "系统不安全" << endl;//不成功 系统不安全
;
}
}
cout << "系统是安全的!" << endl;//如果安全,输出成功
cout << "分配的序列:";
; i < M; i++) //输出运行进程的数组
{
cout << temp[i];
) cout << "->";
}
cout << endl;
;
}

c++银行家算法的更多相关文章
- c/c++多线程模拟系统资源分配(并通过银行家算法避免死锁产生)
银行家算法数据结构 (1)可利用资源向量Available 是个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目.如果Available[j]=K,则表示系统中现有Rj类资源K个. (2) ...
- Round() 四舍五入 js银行家算法(转)
首先问一下round(0.825,2) 返回的结果,大家猜一猜, 首先SQL server 返回的是 0.83 js的返回结果 是0.83,code 如下: var b = 0.825; ...
- 银行家算法java实现
关于银行家算法的理论知识,课本或者百度上有好多资料,我就不再多说了,这里把我最近写的银行家算法的实现带码贴出来. 由于这是我们的一个实验,对系统资源数和进程数都指定了,所以这里也将其指定了,其中系统资 ...
- 操作系统,银行家算法模拟实现(Windows 环境 C++)
计算机操作系统课设需要,写了两个下午的银行家算法(陷在bug里出不来耽误了很多时间),参考计算机操作系统(汤子瀛) 实现过程中不涉及难度较大的算法,仅根据银行家算法的思想和步骤进行实现.以下为详细步骤 ...
- 银行家算法C++程序
此程序在Windows10 CodeBlocks17.12环境下测试运行,其他编程环境未经测试! 作业需求↓↓↓↓↓↓ 运行效果图如下 (codeblocks下载地址http://www.cod ...
- python模拟银行家算法
前言: 大二第一学期学习了操作系统,期末实验课题要求模拟算法.遂根据自己学习的python写下此文.以此锻炼自己编码能力.虽说是重复造轮子,但还是自己的思路体现 代码及注释如下(银行家算法不再赘述): ...
- 预防和避免死锁的方法及银行家算法的java简单实现
预防死锁 (1) 摒弃"请求和保持"条件 基本思想:规定所有进程在开始运行之前,要么获得所需的所有资源,要么一个都不分配给它,直到所需资源全部满足才一次性分配给它. 优点:简单.易 ...
- Round() 四舍五入 js银行家算法
首先问一下round(0.825,2) 返回的结果,大家猜一猜, 首先SQL server 返回的是 0.83 js的返回结果 是0.83,code 如下: var b = 0.825; ...
- C程序模拟实现银行家算法
C程序模拟实现银行家算法 上周又做操作系统实验,题目是用程序模拟实现银行家算法,写了半天还真有点晕,主要是因为想尽可能符合课本上的描述,所以写出来的程序就比较恶心了,好了,银行家算法就不多说了,不了解 ...
随机推荐
- layer ui插件显示tips时,修改字体颜色
今天做调查问卷,又遇到一个蛋疼小问题,记录下. 调查问卷有很多选项是要求必填的,如果不填的话,需要给出友好的提示.用的如下组件:http://layer.layui.com/ 1.之前一直默认用的: ...
- python 函数 装饰器 内置函数
函数 装饰器 内置函数 一.命名空间和作用域 二.装饰器 1.无参数 2.函数有参数 3.函数动态参数 4.装饰器参数 三.内置函数 salaries={ 'egon':3000, 'alex':10 ...
- web开发 c/s结构 和 b/s结构
web开发 c/s结构 和 b/s结构 c/s结构 --client/server 客户端/服务器机构 如qq b/s结构 -- browser/server 浏览器/服务器结构 如网站 mvc设计 ...
- python中的多线程
一个程序可以理解为一个进程,这个进程有其代号,可以依据这个代号将其杀死. 一个进程肯定有且只有一个主线程,他可以有很多子线程. 运行一个任务如果可以有许多子线程同时去做,当然会提高效率. 但是,在py ...
- Java中的变量数据类型补充
Java中变量的数据类型的补充 变量按照数据类型进行分类 1.基本数据类型 数值型:①整数类型(byte,short,int,long)②浮点型(float,doubbe)③字符型(char)④布尔型 ...
- Microsoft CRM-QueryExpression 成员
名称 ColumnSet 获取或设置要包含的列. Criteria 获取或设置过滤查询结果的复杂条件和逻辑过滤器表达式. Distinct 获取或设置查询的结果是否包含重复的实体实例. Entit ...
- R语言-ggplot初级
ggplot2简介: 在2005年开始出现,吸取了基础绘图系统和lattice绘图系统的优点,并利用一个强大的模型来对其进行改进,这一模型基于之前所述的一系列准则, 能够创建任意类型的统计图形 1.导 ...
- Java基础详解
从写Java系列的第一篇到现在已经三个月了,因为在网络上或书籍中没有见到一些很适合初学者的学习流程,所以下决心自己写一写,也当作回顾一下Java的知识.网上有许多Java教程之类的内容,都是从概念起步 ...
- 半径无关快速高斯模糊实现(附完整C代码)
之前,俺也发过不少快速高斯模糊算法. 俺一般认为,只要处理一千六百万像素彩色图片,在2.2GHz的CPU上单核单线程超过1秒的算法,都是不快的. 之前发的几个算法,在俺2.2GHz的CPU上耗时都会超 ...
- [NOI2015]品酒大会
题目描述 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战 两个环节,分别向优胜者颁发“首席品酒家”和“首席猎手”两个奖项,吸引了众多品酒师参加. 在大会的晚餐上,调酒师 Rainb ...