银行家算法C语言代码(共10页)

上传人:s9****2 文档编号:485426603 上传时间:2023-05-05 格式:DOCX 页数:10 大小:168.81KB
返回 下载 相关 举报
银行家算法C语言代码(共10页)_第1页
第1页 / 共10页
银行家算法C语言代码(共10页)_第2页
第2页 / 共10页
银行家算法C语言代码(共10页)_第3页
第3页 / 共10页
银行家算法C语言代码(共10页)_第4页
第4页 / 共10页
银行家算法C语言代码(共10页)_第5页
第5页 / 共10页
点击查看更多>>
资源描述

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

1、精选优质文档-倾情为你奉上实验名称: 银行家算法 姓 名: 杨秀龙 学 号: 专业班级: 创新实验班111 指导老师: 霍林 实验题目银行家算法实验目的更深层的了解银行家算法是如何避免死锁的设计思想银行家算法是根据进程的请求,假设在已分配给该进程请求的资源后,进行安全性算法,如果都能满足其他进程的请求,则满足该进程的请求,否则挂起该进程的请求。假设在一个系统中,知道相应的进程的状态(最大需求、已占用的资源量、还需要的资源量和可利用的资源数),某个进程发出请求,在请求满足两大请求(小于还需要的资源并小于可利用资源数)时,分配给该进程相应的资源,再进行安全检测,在确认安全的情况下,才把资源真正分配

2、给该进程,否则终止请求!主要数据结构根据算法的相应需求,需要定义int maxMM;int allocationMM;int needMM;int availableM;int workM;等数组开始结束输入总进程数输入资源数输入Max矩阵输入Allocation矩阵是否添加进程请求输入进程号和请求资源否是流程图运行结果图(1)分配进程的相应状态图(2)请求和请求完全部资源后释放资源图(3)继续请求并释放其他进程图(2)所有进程请求完成后系统资源还原附录原代码如下:# include stdio.h # define M 50int maxMM;int allocationMM;int nee

3、dMM;int availableM; int i, j, n, m, anquan,x=0;/*7 5 3 0 1 0 7 4 3 3 3 2 3 2 2 2 0 0 1 2 2 9 0 2 3 0 2 6 0 0 2 2 2 2 1 1 0 1 1 4 3 3 0 0 2 4 3 1*/ main() void check(); int p,q,control; int reqM,allocation1MM,need1MM,available1M; printf(输入进程总数:); scanf(%d, &n); printf(输入资源种类数量:); scanf(%d, &m); print

4、f(输入需求矩阵Max:n); for(i=0;in; i+) for(j=0;jm; j+) scanf(%2d,&maxij); printf(输入已分配矩阵Allocation:n); for(i=0;in; i+) for(j=0;jm; j+) scanf(%d, &allocationij); for (i=0;in; i+) for(j=0;jm; j+) needij=maxij-allocationij; printf(输入资源的系统初始值:n); for (j=0;jm;j+) scanf(%d, &availablej); for (j=0;jm;j+)for(i=0;i

5、n;i+)availablej=availablej-allocationij; check(); if (anquan=1) /如果已知的状态安全则执行以下代码 for(control=0;control+) p=0,q=0; printf(输入请求的进程号: ); scanf(%d, &i); printf(输入该进程的请求资源数组:); for(j=0;jm; j+) scanf(%d,&reqj); for(j=0;jneedij) p=1; if(p) printf(请求资源大于该进程还需要的资源!n); else for(j=0;javailablej)/判断请求是否大于可用资源

6、q=1; if(q) printf(可用资源不能满足请求!n); else for(j=0;jm; j+) /满足两大条件 available1j=availablej; /保持资源的当前 allocation1ij=allocationij; need1ij=needij; availablej=availablej-reqj; /尝试把资源分配给进程 allocationij=allocationij+reqj; needij=needij-reqj; if(needij=0)x=x+1; /当进程满足时释放资源 if(x=m) for(j=0;jm;j+) availablej=avai

7、lablej+allocationij; allocationij=0; available1j=availablej; x-; else x=0; check(); if(anquan=0) for (j=0;jm; j+) availablej=available1j; /还原分配前的状态 allocationij=allocation1ij; needij=need1ij; printf(执行该进程不安全!返回继续操作。n); printf(是否继续请求?n); void check() /安全性算法 int k, f, no=0; int workM,aM; char finishM; anquan=1; for(i=0;in; i+) finishi=F; for(j=0;jm; j+) workj=availablej; k=n; do for (i=0;in; i+) if (finishi=F) f=1; for (j=0;jworkj) f=0; if (f=1) /找到还没完成的且需求数小于可提供进程继续运行的 finishi=T; ano+=i; /记录安全序列号 for (j=0;jm; j+) workj=workj+alloc

展开阅读全文
相关资源
相关搜索

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

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