java实现简单银行家算法
本文实例为大家分享了java实现银行家算法的具体代码,供大家参考,具体内容如下
题目:
初始时,Allocate[i,j]=0,表示初始时没有进程得到任何资源。假定进程对资源的请求序
列为:
Request(1)[M]=(1,0,0);
Request(2)[M]=(2,1,0);
Request(2)[M]=(2,0,1);
Request(3)[M]=(2,1,1);
Request(4)[M]=(0,0,2);
Request(2)[M]=(1,0,1);
Request(1)[M]=(1,0,1);
请用Banker算法判断每一次资源请求是否接受,如果接受请求,请给出请求接受后的资
源分配状态,即Allocate矩阵、Need矩阵和Available向量。
大致思路:
(1):判断该进程资源请求是否小于Need需求矩阵,小于则进第二步
(2):判断该进程资源请求向量是否小于剩余资源向量Available,小于则进入第三步
(3):备份下资源状态矩阵,假设接收该需求,求出相应的资源状态矩阵,需求矩阵,剩余资源向量
(4):判断接收请求后的状态是否是安全状态
A:初始该状态下的进程标识都为false,work为资源剩余向量
B;循环该状态下的进程,如果满足标识为false,并且该进程的需求向量小于work则进入C,当循环完毕都没有满足条件的进入D。
C:work+Allocate(对应进程的状态),将该进程对应的进程状态标识为true,将B的循环数变为0,从头开始循环(进入B)
D:循环遍历该状态下的进程标识,如果都为true则判断状态安全,否则判断状态不安全
(5):如果状态是安全的输入该状态下的各个矩阵与向量,如果不安全,则利用刚刚备份的资源状态矩阵,回滚。
运行截图:
源代码
packageBanker; publicclassBanker{ publicstaticintN=4;//线程个数 publicstaticintM=3;//资源个数 publicstaticint[]Resource={9,3,6};//资源向量; publicstaticint[][]Cliam={{3,2,2},{6,1,3},{3,1,4},{4,2,2}}; publicstaticint[][]Allocate=newint[N][M]; publicstaticint[][]Need={{3,2,2},{6,1,3},{3,1,4},{4,2,2}}; publicstaticint[]Available={9,3,6}; publicint[][]state=newint[N][M]; publicstaticvoidmain(Stringargs[]){ Bankerban=newBanker(); //请求序列数组,包含第几个请求,那条进程,请求资源向量。 int[][][]re={{{1},{1,0,0}},{{2},{2,1,0}},{{2},{2,0,1}},{{3},{2,1,1}},{{4},{0,0,2}},{{2},{1,0,1}},{{1},{1,0,1}}}; for(intj=0;jwork[k]){ returnfalse; } } returntrue;//返回状态 } //判断该进程请求向量是否小于请求矩阵中对应的向量请求资源 publicbooleanjudgementrequest(int[]Request,inti){ for(intj=0;j Need[i][j]){ returnfalse; } } returntrue; } //判断该进程请求向量是否小于剩于资源向量 publicbooleanjudgementAvali(int[]Request){ for(intj=0;j Available[j]){ returnfalse; } } returntrue; } //假设分配后修改资源分配矩阵 publicint[][]addrequest(int[][]Allocate,int[]Request,inti){ for(inth=0;h 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。