c语言实现银行家算法.docx

上传人:scccc 文档编号:13559633 上传时间:2022-01-16 格式:DOCX 页数:9 大小:70.67KB
返回 下载 相关 举报
c语言实现银行家算法.docx_第1页
第1页 / 共9页
c语言实现银行家算法.docx_第2页
第2页 / 共9页
c语言实现银行家算法.docx_第3页
第3页 / 共9页
c语言实现银行家算法.docx_第4页
第4页 / 共9页
c语言实现银行家算法.docx_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《c语言实现银行家算法.docx》由会员分享,可在线阅读,更多相关《c语言实现银行家算法.docx(9页珍藏版)》请在三一文库上搜索。

1、#include #include #include # define m 50 int no1; / 进程数int no2; / 资源数int r;int allocationmm,needmm,availablem,maxmm;char name1m,name2m;/定义全局变量void main() void check();void print();int i,j,p=0,q=0;char c;int requestm,allocation1mm,need1mm,available1m;printf(*n);printf(*银行家算法的设计与实现*n);printf(*n);print

2、f( 请输入进程总数:n);scanf(%d,&no1);printf( 请输入资源种类数: n);scanf(%d,&no2);printf(请输入 Max矩阵:n);for(i=0;ino1;i+)for(j=0;jno2;j+)scanf(%d,&maxij); /输入已知进程最大资源需求量printf( 请输入 Allocation 矩阵 :n);for(i=0;ino1;i+)for(j=0;jno2;j+)scanf(%d,&allocationij); /输入已知的进程已分配的资源数for(i=0;ino1;i+)for(j=0;jno2;j+)needij=maxij-allo

3、cationij; /根据输入的两个数组计算出 need 矩阵的值printf( 请输入 Available 矩阵 n);for(i=0;ino2;i+)scanf(%d,&availablei); /输入已知的可用资源数print(); /输出已知条件check(); /检测T0 时刻已知条件的安全状态if(r=1) /如果安全则执行以下代码doq=0;p=0;printf(n 请输入请求资源的进程号 (04) : n);for(j=0;j=no1)printf( 输入错误,请重新输入: n);continue;else break;printf(n 请输入该进程所请求的资源数request

4、j:n);for(j=0;jno2;j+)scanf(%d,&requestj);for(j=0;jneedij) p=1; /if(p)printf(请求资源超过该进程资源需求量,请求失败!elsefor(j=0;javailablej) q=1; /if(q)printf( 没有做够的资源分配,请求失败!else/for(j=0;jno2;j+)available1j=availablej;allocation1ij=allocationij;need1ij=needij; /保存原已分配的资源数,判断请求是否超过该进程所需要的资源数n);判断请求是否超过可用资源数n);请求满足条件仍需要

5、的资源数和可用的资源数availablej=availablej-requestj;allocationij+=requestj;needij=needij-requestj; / 系统尝试把资源分配给请求的进程print();check(); / 检测分配后的安全性if(r=0) / 如果分配后系统不安全for(j=0;jno2;j+)availablej=available1j;allocationij=allocation1ij;needij=need1ij; /还原已分配的资源数,仍需要的资源数和可用的资源数printf( 返回分配前资源数n);print();printf(n 你还要

6、继续分配吗 Y or N n); / 判断是否继续进行资源分配c=getche();while(c=y|c=Y);void check() / 安全算法函数int k,f,v=0,i,j;int workm,am;bool finishm;r=1;for(i=0;ino1;i+)finishi=false; /初始化进程均没得到足够资源数并完成for(i=0;ino2;i+)worki=availablei;/worki表示可提供进程继续运行的各类资源数k=no1;dofor(i=0;ino1;i+)if(finishi=false)f=1;for(j=0;jworkj)f=0;if(f=1)

7、/ 找到还没有完成且需求数小于可提供进程继续运行的资源数的进程finishi=true;av+=i; / 记录安全序列号for(j=0;j0);f=1;for(i=0;ino1;i+) / 判断是否所有的进程都完成if(finishi=false)f=0;break;if(f=0)/ 若有进程没完成,则为不安全状态printf( 系统处在不安全状态! );r=0;elseprintf(n 系统当前为安全状态,安全序列为: n);for(i=0;ino1;i+)printf(p%d ,ai); /输出安全序列 void print() / 输出函数int i,j;printf(n);printf

8、(”*此时刻资源分配情况*n);printf( 进程名 / 号 | Max | Allocation | Need |n);for (i = 0; i no1; i+) printf( p%d/%d ,i,i);for (j = 0; j no2; j+)printf(%d ,maxij);for (j = 0; j no2; j+)printf( %d ,allocationij);for (j = 0; j no2; j+)printf( %d ,needij);printf(n);printf(n);printf( 各类资源可利用的资源数为 :);for (j = 0; j no2; j+)printf( %d,availablej);printf(n);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1