c语言银行家算法模拟程序,银行家算法C语言模拟程序
#include
#include
#include
int Available[10]; //可使用资源向量
int Max[10][10]; //最大需求矩阵
int Allocation[10][10]={0}; //分配矩阵
int Need[10][10]={0}; //需求矩阵
int Work[10]; //工作向量
int Finish[10]; //状态标志
int Request[10][10]; //进程申请资源向量
int Pause[10];
int List[10];
int i,j;
int n; //系统资源总数
int m; //总的进程数
int a; //当前申请的进程号
int l,e; //计数器
int b=0,c=0,f=0,g; //计数器
void mainenter()//主要的输入部分代码
{
printf("请输入系统总共有的资源数:");
scanf("%d",&n);
printf("请输入总共有多少个进程:");
scanf("%d",&m);
for(i=1;i<=n;i++)
{
printf("第%d类资源有的资源实例:",i);
scanf("%d",&Available[i]);
}
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
printf("进程P[%d]对第%d类资源的最大需求量:",i,j);
scanf("%d",&Max[i][j]);
Need[i][j]=Max[i][j];
}
}
}
void mainrequest() //进程提出新申请的代码部分
{
printf("请输入申请资源的进程:");
scanf("%d",&a);
for(i=1;i<=n;i++)
{
printf("请输入进程P[%d]对%d类资源的申请量:",a,i);
scanf("%d",&Request[a][i]);
if(Request[a][i]>Need[a][i])
printf("n出错!进程申请的资源数多于它自己申报的最大量n");
if(Request[a][i]>Available[i])
printf("nP[%d]必须等待n",a);
//以下是试探性分配
Available[i]=Available[i]-Request[a][i];
Allocation[a][i]=Allocation[a][i]+Request[a][i];
Need[a][i]=Need[a][i]-Request[a][i];
Work[i]=Available[i];
}
for(i=1;i<=m;i++)
{
Pause[i]=Available[i];//Pause[i]只是一个暂时寄存的中间变量,为防止在下面
//安全性检查时修改到Available[i]而代替的一维数组
Finish[i]=false;
}
for(g=1;g<=m;g++)
{
for(i=1;i<=m;i++)
{
b=0; //计数器初始化
for(j=1;j<=n;j++)
{
if(Need[i][j]<=Pause[j])
{
b=b+1;
}
if(Finish[i]==false&&b==n)
{
for(l=1;l<=n;l++)
{
Pause[l]=Pause[l]+Allocation[i][l];
}
Finish[i]=true;
printf("$ %d ",i);//依次输出进程安全序列之一中每个元素
}
}
}
}
printf("n");
for(i=1;i<=m;i++)
{
if(Finish[i]==true) f=f+1;//统计Finish[i]==true的个数
}
if (f==m)
{
printf("safe static");
f=0;//将计数器f重新初始化,为下一次提出新的进程申请做准备
}
else
{
printf(" unsafe static ");//以下代码为当系统被判定为不安全状态时
//返回提出申请前的状态
for(i=1;i<=n;i++)
{
Available[i]=Available[i]+Request[a][i];
Allocation[a][i]=Allocation[a][i]-Request[a][i];
Need[a][i]=Need[a][i]+Request[a][i];
}
}
}
void mainprint()
{
printf("当前的系统状态n");
printf(" 目前占有量 最大需求量 尚需要量 n进程");
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
printf(" %d类",j);
}
for(i=1;i<=m;i++)
{
printf("nP[%d]",i);
for(j=1;j<=n;j++)
{
printf(" %d ",Allocation[i][j]);
}
for(j=1;j<=n;j++)
{
printf(" %d ",Max[i][j]);
}
for(j=1;j<=n;j++)
{
printf(" %d ",Need[i][j]);
}
}
printf("nn系统剩余资源量: ");
for(i=1;i<=n;i++)
{
printf(" %d ",Available[i]);
}
printf("n");
}
void main()
{ int k,h=1;
while(h)
{ system("cls");
{
printf("nn ★ 欢迎使用本程序 ★n");
printf("nn 1:输入系统的资源数、申请进程数、每个类资源的实例数");
printf("n 2:…………………………………… 输入进程的资源申请");
printf("n 3:…………………………………………… 输出系统状态");
printf("n 4:………………………………………………… 退出程序");
printf("nn please choose ");
scanf("%d",&k);
}
switch(k)
{
case 1:mainenter(); break;
case 2:mainrequest(); break;
case 3:mainprint(); break;
case 4:h=0; break;
}
printf("n");
system("pause");
}
system("cls");
printf("nn 谢谢使用 n");
printf("nn See you next time!!!nnn");
}
c语言银行家算法模拟程序,银行家算法C语言模拟程序相关推荐
- 实验题目:用银行家算法和随机算法实现资源分配
实验题目:用银行家算法和随机算法实现资源分配 实验原理: 银行家算法的分配资源是:当某个进程提出资源申请时,假定先分配资源给它,然后查找各进程的剩余请求,检查系统剩余资源量是否由于进程的分配而导致系统 ...
- 操作系统——银行家算法(银行家和房地产开发商的爱恨情仇)
操作系统--银行家算法 什么是银行家算法 银行家算法(Banker's Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避 ...
- 【每日算法】C语言8大经典排序算法(2)
接上文--->[每日算法]C语言8大经典排序算法(1) 二.插入类排序 插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中 ...
- 数据结构源码笔记(C语言):置换-选择算法
//实现置换-选择算法#include<stdio.h> #include<malloc.h> #include<string.h> #include<std ...
- Algorithm:C+语言实现之数组相关算法(和为定值的两个数、和为定值的m个数、荷兰国旗、长度为2n的洗牌算法、任意长度数组的洗牌算法)
Algorithm:C+语言实现之数组相关算法(和为定值的两个数.和为定值的m个数.荷兰国旗.长度为2n的洗牌算法.任意长度数组的洗牌算法) 目录 数组 1.寻找和为定值的两个数 2.和为定值的m个数 ...
- Algorithm:C++语言实现之队列相关算法(最短路径条数问题、拓扑排序)
Algorithm:C++语言实现之队列相关算法(最短路径条数问题.拓扑排序) 目录 队列 1.最短路径条数问题 2.拓扑排序 队列 1.最短路径条数问题
- Algorithm:C++语言实现之链表相关算法(单链公共结点问题、一般LCA、括号匹配、最长括号匹配、逆波兰表达式Reverse Polish Notation、直方图矩形面积、收集雨水问题)
Algorithm:C++语言实现之链表相关算法(单链公共结点问题.一般LCA.括号匹配.最长括号匹配.逆波兰表达式Reverse Polish Notation.直方图矩形面积.收集雨水问题) 目录 ...
- Algorithm:C++语言实现之贪心法算法相关问题
Algorithm:C++语言实现之贪心法算法相关问题 目录 一.贪心法 一.贪心法 1.LIS的算法分析
- Algorithm:C++语言实现之链表相关算法(链表相加、链表的部分翻转、链表划分、链表去重、重复元素全部删除)
Algorithm:C++语言实现之链表相关算法(链表相加.链表的部分翻转.链表划分.链表去重.重复元素全部删除) 目录 一.链表 1.1.链表相加 1.2.链表相加 2.1.链表的部分翻转 2.2. ...
- Algorithm:C++语言实现之字符串相关算法(字符串的循环左移、字符串的全排列、带有同个字符的全排列、串匹配问题的BF算法和KMP算法)
Algorithm:C++语言实现之字符串相关算法(字符串的循环左移.字符串的全排列.带有同个字符的全排列.串匹配问题的BF算法和KMP算法) 目录 一.字符串的算法 1.字符串的循环左移 2.字符串 ...
最新文章
- Python学习日志(5)- Numpy
- java中的日期时间的计算与比较
- Yii2系列教程三:Database And Gii
- 我的vscode配置 利用Settings Sync一键安装
- Wave 文件(5): 获取 Wave 文件的格式信息
- 浙江义乌计算机中专学校,浙江义乌有没有中专学校?
- Dijkstra Algorithm (迪杰斯特拉算法)
- Java多线程学习十三:synchronized 和 Lock 区别以及孰优孰劣,如何选择?
- rbf神经网络参数设置_基于梯度下降法的RBF神经网络逼近(03)
- Kettle Spoon入门教程
- Java基础——链表
- 外星人笔记本 键盘灯不亮解决 Alienware 13
- 计算机病毒鼻祖拟推新型搜索技术挑战谷歌,美科学家将推新型搜索引擎挑战谷歌...
- OpenCv鼠标事件
- HDU6184 Counting Stars
- 2017CS231n李飞飞深度视觉识别笔记(二)——图像分类
- MFC中画出圆形按钮,告别方形普通按钮
- c#为什么用的人很少
- hog特征与fhog特征
- nacos和eruka的区别
热门文章
- mysql hibernate 分页查询_hibernate分页查询的实现
- android 软件 加密方法,Android中WIFI常见的几种加密方式(详细)
- php 检测 变量是否设置,PHP中检测一个变量是否有设置的函数是什么?
- mysql数据库产生的背景_MySql路途之mysql背景
- 梭织布印染后整理瑕疵最全解读
- VS2013下使用QT和MFC的错误解决方案
- java web listener_JavaWeb:Listener
- ThinkJS入门+实例(实现认证权限等基本功能)
- Trace obtained enqueue information by set event 10704
- centos7安装mysql主从_centos7 安装mysql 和主从复制