银行家算法2

上传人:F****n 文档编号:99835846 上传时间:2019-09-21 格式:DOC 页数:9 大小:33.50KB
返回 下载 相关 举报
银行家算法2_第1页
第1页 / 共9页
银行家算法2_第2页
第2页 / 共9页
银行家算法2_第3页
第3页 / 共9页
银行家算法2_第4页
第4页 / 共9页
银行家算法2_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《银行家算法2》由会员分享,可在线阅读,更多相关《银行家算法2(9页珍藏版)》请在金锄头文库上搜索。

1、特别申明:转载一位大哥的程序一算法介绍:*数据结构:1.可利用资源向量Available2.最大需求矩阵Max3.分配矩阵Allocation4.需求矩阵Need *功能介绍:模拟实现Dijkstra的银行家算法以避免死锁的出现.分两部分组成:第一部分:银行家算法(扫描)1如果Request=Need,则转向2;否则,出错2如果Request=Available,则转向3,否则等待3系统试探分配请求的资源给进程4系统执行安全性算法第二部分:安全性算法1.设置两个向量(1).工作向量:Work=Available(表示系统可提供给进程继续运行所需要的各类资源数目)(2).Finish:表示系统是

2、否有足够资源分配给进程(True:有;False:没有).初始化为False2.若Finishi=False&Need=Work,则执行3;否则执行4(I为资源类别)3.进程P获得第i类资源,则顺利执行直至完成!并释放资源:Work=Work+Allocation;Finishi=true;转24. 若所有进程的Finishi=true,则表示系统安全;否则,不安全!二.原代码及注释:#include#include#include#include windows.h#define MAX_PROCESS 32 /最大进程数#define MAX_COURCE 64 /最大资源类别int MA

3、X_FACT_PROCESS; /实际总进程数int MAX_FACT_COURCE; /实际资源类别数int AvailableMAX_COURCE; /可利用资源向量int MaxMAX_PROCESSMAX_COURCE; /最大需求矩阵int AllocationMAX_PROCESSMAX_COURCE; /分配矩阵int NeedMAX_PROCESSMAX_COURCE; /需求矩阵int Request_PROCESS; /发出请求的进程int Request_COURCE; /被请求资源类别int Request_COURCE_NEMBER; /请求资源数struct COM

4、Pint value;int num;int next;int flag=0;void Read_Initiate(void) /读入初始化文档ifstream infile(Initiate.txt); if(!infile)cout不能打开输入文件:Initiate.txtn;exit(1);cout开始读入初始化文档ch) Arraynum+=ch;num=0; MAX_FACT_COURCE=Arraynum+; for(int j=0;jMAX_FACT_COURCE;j+)Availablej=Arraynum+; MAX_FACT_PROCESS=Arraynum+;for(in

5、t i=0;iMAX_FACT_PROCESS;i+)for(int j=0;jMAX_FACT_COURCE;j+)Maxij=Arraynum+;infile.close();void Write_Initiate(void) /写入初始化文档(分配资源ofstream outfile(Initiate.txt);if(!outfile)cout不能打开初始化文档:n;exit(1);int ArrayMAX_PROCESS*MAX_COURCE*2;int num=0;Arraynum+=MAX_FACT_COURCE; for(int i=0;iMAX_FACT_COURCE;i+)A

6、rraynum+=Availablei;Arraynum+=MAX_FACT_PROCESS;for(i=0;iMAX_FACT_PROCESS;i+)for(int j=0;jMAX_FACT_COURCE;j+)Arraynum+=Maxij;num=0;outfileArraynum+ ;for(i=0;iMAX_FACT_COURCE;i+)outfileArraynum+ ;outfilenArraynum+endl;for(i=0;iMAX_FACT_PROCESS;i+)for(int j=0;jMAX_FACT_COURCE;j+)outfileArraynum+ ;outfi

7、leendl;DWORD m_delay=3000;Sleep(m_delay);outfile.close();cout修改初始化文档成功!endl;void Allocated_list(void) /读入已分配资源列表ifstream infile(Allocated_list.txt); if(!infile)cout不能打开输入文件:Allocated_list.txtn;exit(1);cout开始读入已分配资源列表ch)Arraynum+=ch;num=0;for(int i=0;iMAX_FACT_PROCESS;i+)for(int j=0;jMAX_FACT_COURCE;

8、j+)Allocationij=Arraynum+;infile.close();void Set_Need(void) /设置需求矩阵cout设置需求矩阵n;for(int i=0;iMAX_FACT_PROCESS;i+)for(int j=0;jMAX_FACT_COURCE;j+)Needij=Maxij-Allocationij;void Read_Request(void) /读入请求向量ifstream infile(Request_list.txt); if(!infile)cout不能打开输入文件:Request_list.txtn;exit(1); cout开始读入请求向量

9、ch) Arraynum+=ch; Request_PROCESS=Array0; Request_COURCE=Array1; Request_COURCE_NEMBER=Array2;infile.close();void Write_Allocation(void) /修改资源分配列表(资源分配)ofstream outfile(Allocated_list.txt);if(!outfile)cout不能打开资源分配列表:n;exit(1);for(int i=0;iMAX_FACT_PROCESS;i+)for(int j=0;jMAX_FACT_COURCE;j+)outfileAl

10、locationij ;outfileendl; DWORD m_delay=3000;Sleep(m_delay);cout修改资源分配列表成功!endl;outfile.close();void Allocate_Source(void) /开始分配(已通过扫描和安全性检测)coutn开始给第Request_PROCESS个进程分配第Request_COURCE类资源Request_COURCE_NEMBER个endl;Write_Initiate();Write_Allocation();DWORD m_delay=3000;Sleep(m_delay);coutn祝贺您,资源分配已成功

11、!endl;void Test_Safty() /安全性检测coutn进入安全性检测!endl; int WorkMAX_COURCE;for(int i=0;iMAX_FACT_COURCE;i+)Worki=Availablei; bool FinishMAX_PROCESSMAX_COURCE;for(i=0;iMAX_FACT_PROCESS;i+)for(int j=0;jMAX_FACT_COURCE;j+)Finishij=false;COMP Array32;for(i=0;iMAX_FACT_PROCESS;i+)Arrayi.value=NeediRequest_COURCE-1; Arrayi.num=i;for(i=0;iMAX_FACT_PROCESS;i+)for(int j=i+1;j=Arrayj.value)int t;t=Arrayj.value; Arrayj.value=Arrayi.value;Arrayi.value=t;t=Arrayj.num; Arrayj.num=Array

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号