版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言实现银行家算法(源码、运行结果)一、 源码/* 银行家算法 10-22*/#include/函数声明void init(int * pcount,int * scount,int Allocation1010,int Need1010,int Available10);void print(int pcount,int scount,int Allocation1010,int Need1010,int Available10);int requs(int scount,int * Requestnumber,int Request10,int Allocation1010,int Ne
2、ed1010,int Available10);void print2(int isreque,int number);void yhj(int number,int pcount,int scount,int Allocation1010,int Need1010,int Available10);int main()int conti=1; /0退出int pcount=0,scount=0; /进程数 和 资源数int Allocation1010;int Need1010;int Available10;/分配矩阵Allocation 需求矩阵Need 可利用资源向量Available
3、 int number=0,Request10=0;/用于记录进程编号 用于记录请求向量while(true)init(&pcount,&scount,Allocation,Need,Available); /调用初始化函数print(pcount,scount,Allocation,Need,Available); /调用打印函数int isreque = requs(scount,&number,Request,Allocation,Need,Available); /调用是否请求函数if(isreque=1)printf(n把资源分配给进程P%d后,资源分配情况如下:n,number);
4、print(pcount,scount,Allocation,Need,Available); /调用打印函数yhj(number,pcount,scount,Allocation,Need,Available); /调用银行家算法函数elseif(isreque=0)yhj(number,pcount,scount,Allocation,Need,Available); /调用银行家算法函数elseprint2(isreque,number);printf(是否继续?0退出,1继续:);scanf(%d,&conti);printf(n);if(conti = 0)break;printf(
5、n);return 0;/初始化函数: 提示用户输入 进程数,资源数,Allocation矩阵等void init(int * pcount,int * scount,int Allocation1010,int Need1010,int Available10)int p,s;int i,j;printf(进程数:);scanf(%d,&p);*pcount = p;printf(资源数:);scanf(%d,&s);*scount = s;printf(Allocationn);for(i=0;ip;i+)printf(P%d:,i);for(j=0;js;j+)scanf(%d,&All
6、ocationij);printf(Needn);for(i=0;ip;i+)printf(P%d:,i);for(j=0;js;j+)scanf(%d,&Needij);printf(Available:);for(i=0;is;i+)scanf(%d,&Availablei);printf(n);/打印函数: 打印当前资源分配情况void print(int pcount,int scount,int Allocation1010,int Need1010,int Available10)int i,j;printf(当前资源分配情况:n);printf(Process Allocatio
7、n Need Availablen);for(i=0;ipcount;i+)printf(P%d ,i);for(j=0;jscount;j+)printf(%3d,Allocationij);printf( );for(j=0;jscount;j+)printf(%3d,Needij);printf( );if(i=0)for(j=0;j=0 & number=4)printf(请输入进程P%d的请求向量,中间用空格键隔开:,number);/接收请求向量for(i=0;iscount;i+)scanf(%d,&Requesti); break; /输入正确 跳出循环elseprintf(请
8、输入有效进程编号!n);/判断请求向量是否合理:是否小于需求向量for(j=0;jNeednumberj)for(j=0;jAvailablej)return 4;return 2;/判断请求向量是否合理:是否小于可利用资源向量bool isrun2 = true;for(j=0;jAvailablej)return 3;/请求向量合理则分配资源/分配资源给请求的进程for(j=0;jscount;j+)/可利用资源数减少Availablej -= Requestj;/进程占用资源数增多Allocationnumberj += Requestj;/需求资源数减少Neednumberj -= R
9、equestj;return 1;else return 0;/打印函数:根据请求函数的返回值进行打印void print2(int isreque,int number)if(isreque=2)printf(出错,P%d进程所需要的资源数已超过它所宣布的最大值nn,number);else if(isreque=3)printf(尚无足够资源,P%d进程需等待nn,number);elseif(isreque=4)printf(出错,P%d进程所需要的资源数已超过它所宣布的最大值且尚无足够资源,P%d进程需等待nn,number,number);/银行家算法函数void yhj(int n
10、umber,int pcount,int scount,int Allocation1010,int Need1010,int Available10)/系统执行安全性算法/设置两个向量 Work和Finish,前者表示系统提供给进程继续运行所需的各类资源数目/后者表示系进程是否运行完成int i,j;int Work10; int Finish10=0; /初始化所有元素为0,代表进程未运行完成/初始化向量Work的值 等于 可利用资源向量Available的值for(i=0;iscount;i+)Worki = Availablei;bool iscan; /能否运行: 可利用资源数是否大
11、于或等于进程所需的资源数int k=0,x10; /安全序列 bool issafe = true; /是否安全int n=1;int done=0; printf(n进行安全性检查n);printf(Process Work Need Allocation Work+Allocation Finishn);while(n=pcount)for(i=0;ipcount;i+)/printf(第%d次内循环n,m+);/一行一行的遍历 即对每个进程进行遍历if(Finishi=0)iscan = true; /初始化,假设可利用资源数都大于或等于进程所需的资源数/判断可利用资源数是否大于或等于进
12、程所需的资源数/printf(判断进程P%d能否运行.n,i);for(j=0;jWorkj)iscan = false; /printf(进程P%d不能运行n,i);break;if(iscan = true)Finishi = 1;printf(P%d ,i);/释放该进程前,可利用资源数Workfor(j=0;jscount;j+)printf(%3d,Workj);printf( );/该进程需求变量Needfor(j=0;jscount;j+)printf(%3d,Needij);printf( );/该进程占用资源数Allocationfor(j=0;jscount;j+)prin
13、tf(%3d,Allocationij);printf( );for(j=0;jscount;j+)/进程运行完成,工作向量资源数增加Workj += Allocationij;printf( );/记录该进程至安全序列/printf(k=%d,i=%dn,k,i);xk = i; k+;/释放该进程后,可利用资源数Work+Allocationfor(j=0;jscount;j+)printf(%3d,Workj);printf(t 1);printf(n);/如果可用资源不能满足任何进程的需要 跳出循环/例如n=1 done1则跳出 done = 0;for(i=0;ipcount;i+)if(Finishi=1)done+;if(don
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年度医师定期考核考前冲刺练习题重点附答案详解
- 2024-2025学年哈尔滨铁道职业技术学院单招《数学》全真模拟模拟题附参考答案详解【满分必刷】
- 2024-2025学年医学检验(师)过关检测试卷标准卷附答案详解
- 2024-2025学年度临床执业医师考前冲刺测试卷【真题汇编】附答案详解
- 2024-2025学年仓储管理人员预测复习附答案详解【基础题】
- 2024-2025学年度执业药师模拟题库附答案详解(典型题)
- 2024-2025学年度四川文化产业职业学院单招《数学》模考模拟试题及参考答案详解(满分必刷)
- 2024-2025学年公务员(国考)经典例题(突破训练)附答案详解
- 2024-2025学年度天津医学高等专科学校单招考试文化素质数学复习提分资料【必考】附答案详解
- 2024-2025学年度执业药师题库含完整答案详解(全优)
- 2025(人教版)小升初数学总复习 知识点总结+专项练习(含答案)
- 2025年岳阳职业技术学院单招职业适应性考试题库带答案
- 2025年春招信息技术试题及答案
- 无创机械通气护理
- 纪委案件审理知识讲座
- 四年级下册青岛版数学计算题每日练习带答案(共20天)
- 新版人教版七年级英语下册第三单元Unit 3 单元教材分析(大单元整体设计)
- 学校心理健康教育整改措施
- 2025年大学华西医院运营管理部招考聘用3人管理单位笔试遴选500模拟题附带答案详解
- 小红书食用农产品承诺书示例
- GB/T 15934-2024电器附件电线组件和互连电线组件
评论
0/150
提交评论