代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
C
】
银行家算法模拟资源分配
作者:
空云万里晴
/ 发布于
2012/11/19
/
789
#include "stdafx.h" #include <iostream> using namespace std; bool checkSafe(int *Need,int *Allocation,int *Available,int p,int r); int _tmain(int argc, _TCHAR* argv[]) { // 进程数为5,资源数为3 int p=5,r=3; // Max为5*3的最大需求矩阵,Available为可利用资源向量, // Allocation为5*3的分配矩阵,Need为5*3的需求矩阵,请求向量Request1 int *Max,*Available,*Allocation,*Need,*Request1; Max = new int[p*r]; Available = new int[r]; Allocation = new int[p*r]; Need = new int[p*r]; Request1 = new int[r]; // 初始化Max矩阵 // 7 5 3 // 3 2 2 // 9 0 2 // 2 2 2 // 4 3 3 *(Max+0*r+0) = 7; *(Max+0*r+1) = 5; *(Max+0*r+2) = 3; *(Max+1*r+0) = 3; *(Max+1*r+1) = 2; *(Max+1*r+2) = 2; *(Max+2*r+0) = 9; *(Max+2*r+1) = 0; *(Max+2*r+2) = 2; *(Max+3*r+0) = 2; *(Max+3*r+1) = 2; *(Max+3*r+2) = 2; *(Max+4*r+0) = 4; *(Max+4*r+1) = 3; *(Max+4*r+2) = 3; // 初始化Allocation矩阵 // 0 1 0 // 2 0 0 // 3 0 2 // 2 1 1 // 0 0 2 *(Allocation+0*r+0) = 0; *(Allocation+0*r+1) = 1; *(Allocation+0*r+2) = 0; *(Allocation+1*r+0) = 2; *(Allocation+1*r+1) = 0; *(Allocation+1*r+2) = 0; *(Allocation+2*r+0) = 3; *(Allocation+2*r+1) = 0; *(Allocation+2*r+2) = 2; *(Allocation+3*r+0) = 2; *(Allocation+3*r+1) = 1; *(Allocation+3*r+2) = 1; *(Allocation+4*r+0) = 0; *(Allocation+4*r+1) = 0; *(Allocation+4*r+2) = 2; // 初始化可利用资源向量Available // 3 3 2 *(Available+0) = 3; *(Available+1) = 3; *(Available+2) = 2; // 初始化Need矩阵 for(int i=0;i<p*r;i++) *(Need+i) = *(Max+i) - *(Allocation+i); // p1请求资源Request1(1,0,2) *(Request1+0) = 1; *(Request1+1) = 0; *(Request1+2) = 2; int flag = 0; for(int i=0;i<r;i++) { if(*(Request1+i)>*(Need+1*r+i)) { flag = 0; break; } else { flag = 1; } } if(flag==1) { int flag2 = 0; for(int i=0;i<r;i++) { if(*(Request1+i)>*(Available+i)) { flag = 0; break; } else { flag2 = 1; } } if(flag2==1) { // 系统试探着进行资源分配 for(int i=0;i<r;i++) { *(Available+i) -= *(Request1+i); *(Allocation+1*r+i) += *(Request1+i); *(Need+1*r+i) -= *(Request1+i); } if(checkSafe(Need,Allocation,Available,p,r)) { cout<<"分配资源后系统处于安全状态,可进行分配!"<<endl; } else { cout<<"分配资源后系统处于不安全状态,系统不分配该资源!"<<endl; // 本次试探分配作废,恢复原来资源分配状态 for(int i=0;i<r;i++) { *(Available+i) += *(Request1+i); *(Allocation+1*r+i) -= *(Request1+i); *(Need+1*r+i) += *(Request1+i); } } } else { cout<<"请求资源出错,无足够资源可分配!"<<endl; } } else { cout<<"请求资源出错,请求资源数不能大于需求资源数!"<<endl; } delete[] Max; delete[] Available; delete[] Allocation; delete[] Need; delete[] Request1; return 0; } bool checkSafe(int *Need,int *Allocation,int *Available,int p,int r) { int i=0,j=0,k=0,m=0,count=0 ,flag1=0,flag2=0; int *list,*Work; // 工作向量Work,安全序列list bool *Finish; // 完成标志Finish Work = new int[r]; Finish = new bool[p]; list = new int[p]; // 初始化完成标志Finish,默认为false for(i=0;i<p;i++) *(Finish+i) = false; // 初始化工作向量Work for(i=0;i<r;i++) *(Work+i) = *(Available+i); // 进行安全检查 while(k<p) { flag1 = 0; for(j=0;j<r;j++) { if(*(Finish+m)!=true) { if(*(Need+m*r+j)>*(Work+j)) { flag1 = 0; break; } flag1 = 1; } } if(flag1==1) { for(j=0;j<r;j++) { *(Work+j) += *(Allocation+m*r+j); } *(Finish+m) = true; *(list+k) = m; count = 0; k++; } else { count++; } if(count==5) break; m++; if(m==5) m=0; } // 若所有进程的*(Finish+i)==true,表示系统处于安全状态 for(i=0;i<p;i++) { if(*(Finish+i)!=true) { flag2 = 0; break; } else { flag2 =1; } } delete[] Work; delete[] Finish; if(flag2==1) { cout<<"存在安全序列:"; for(i=0;i<p;i++) cout<<" "<<*(list+i); cout<<endl; delete[] list; return true; } else { return false; } }
试试其它关键字
银行家算法
同语言下
.
获取手机通讯录 iOS去除数字以外的所有字符
.
异步加载音乐等资源
.
交通罚单管理系统
.
freemark实现,简单的替换
.
计算斐波那契数列
.
base64解码 包括解码长度
.
图像显示
.
冒泡排序
.
输入十进制数,输出指定进制
.
链式栈
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
空云万里晴
贡献的其它代码
(
5
)
.
定时关机
.
Java 实现单链表
.
银行家算法模拟资源分配
.
复数运算
.
数组合并
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3