版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、/*死锁避免与死锁检测模拟程序【银行家算法】importjava.util.*;publicclassTestTheBankerpublicstaticvoidmain(Stringargs)Scannerscanner=newScanner(System.in);TheBankertb=newTheBanker();tb.deadlockAvoidance();/死锁避免intgate=1;while(gate!=0)tb.deadlockDetection();/死锁检测System.out.println("如果您要继续分配资源请输入"1",退出请输入&qu
2、ot;0"");System.out.print("您输入的值为:");gate=scanner.nextInt();System.out.println();System.out.println("使用愉快!期待您下次使用!");classTheBankerintm;intn;intmax;intmaxbak;/备份用intallocation;intallocationbak;/备份用intneed;intneedbak;/备份用intavailable;intavailablebak;/备份用publicTheBanker()S
3、canners=newScanner(System.in);System.out.println("初始化=");System.out.print("请依次输入系统中的【进程数】和【资源类型数】:");m=s.nextInt();n=s.nextInt();max=newintmn;maxbak=newintmn;allocation=newintmn;allocationbak=newintmn;need=newintmn;needbak=newintmn;available=newintn;availablebak=newintn;for(inti=
4、0;i<max.length;i+)/初始化向量MAX、ALLOCATIO、NNEED、AVAILABLESystem.out.print("请依次输入第"+i+"进程的各资源数:");for(intj=0;j<maxi.length;j+)maxij=s.nextInt();maxbakij=maxij;for(inti=0;i<allocation.length;i+)System.out.print("请依次输入第"+i+"进程中已分配资源的数量:");for(intj=0;j<all
5、ocationi.length;j+)allocationij=s.nextInt();allocationbakij=allocationij;for(inti=0;i<need.length;i+)for(intj=0;j<needi.length;j+)needij=maxij-allocationij;needbakij=needij;for(inti=0;i<available.length;i+)System.out.print("请输入系统中第"+i+"种资源的剩余量:");availablei=s.nextInt();a
6、vailablebaki=availablei;System.out.println("初始化结果=");System.out.println("MAXALLOCATIONNEEDAVAILABLE");for(inti=0;i<m;i+)System.out.print("P"+i+":");for(intj=0;j<n;j+)if(maxij>9)/如果是两位数,控制格式,在数字前少输""。System.out.print(maxij+"");elseS
7、ystem.out.print(""+maxij+"");System.out.print("");for(intj=0;j<n;j+)if(allocationij>9)System.out.print(allocationij+"");elseSystem.out.print(""+allocationij+"");System.out.print("");for(intj=0;j<n;j+)if(needij>9)System
8、.out.print(needij+"");elseSystem.out.print(""+needij+"");if(i=0)System.out.print("");for(intj=0;j<n;j+)if(availablej>9)System.out.print(availablej+"");elseSystem.out.print(""+availablej+"");System.out.println();System.out.pr
9、intln("=完成初始化=");System.out.println();publicvoiddeadlockAvoidance()intsecurity=newintm;booleanparam=newbooleanm;inttar=newintn;intcount=0;intnum1=m+1;/计数器,每循环一遍所有进程就自减1intnum2=m;/计数器,每遇到一个被满足的进程就自减1while(num1>0)/如果num1=0则说明依次循环下来没有能够满足的进程,因此中止for(inti=0;i<m;i+)if(parami=false)/只有没有被满
10、足的进程才可以进入内层循环parami=true;for(intj=0;j<n;j+)tarj=availablej-needij;if(tarj<0)parami=false;if(parami=true)for(intk=0;k<n;k+)availablek=availablek+allocationik;securitycount=i;/记录以满足的进程号count+;num2-;num1-;while(num2=0)&&(num1>0)System.out.print("【安全序列】为:");for(inti=0;i<
11、m;i+)if(i=(m-1)System.out.print("P"+securityi);elseSystem.out.print("P"+securityi+"->");System.out.println();System.out.println("=【死锁避免】结束=");System.out.println();return;while(num1=0)&&(num2>0)System.out.println("抱歉!没有【安全序列】!");System.o
12、ut.println("=【死锁避免】结束=");System.out.println();return;publicvoiddeadlockDetection()Scannersc=newScanner(System.in);intkey;intsecurity=newintm;booleanparam=newbooleanm;inttemp=newintn;inttar=newintn;intcount=0;intnum1=m+1;/计数器,每循环一遍所有进程就自减1intnum2=m;/计数器,每遇到一个被满足的进程就自减1for(inti=0;i<m;i+)/
13、回复死锁检测前的状态for(intj=0;j<n;j+)maxij=maxbakij;allocationij=allocationbakij;needij=needbakij;availablej=availablebakj;System.out.println();System.out.println("死锁检测=");System.out.println("如果您此时想申请系统资源请输入【进程号】和"+n+"种【资源量】,系统将帮您判断是否可行。");System.out.print("您输入的进程号为:&quo
14、t;);key=sc.nextInt();for(inti=0;i<n;i+)System.out.print("您要申请的第"+i+"种资源的数量为:");tempi=sc.nextInt();for(inti=0;i<n;i+)allocationkeyi=allocationkeyi+tempi;needkeyi=needkeyi-tempi;if(needkeyi<0)System.out.println("申请资源大于所需资源,系统【不能】分配资源!");for(intk=0;k<m;k+)/回复死锁
15、检测前的状态for(intj=0;j<n;j+)if(k=0)availablej=availablebakj;maxkj=maxbakkj;allocationkj=allocationbakkj;needkj=needbakkj;return;availablei=availablei-tempi;if(availablei<0)System.out.println("申请资源大于系统所剩资源,系统【不能】分配资源!");for(intk=0;k<m;k+)/回复死锁检测前的状态for(intj=0;j<n;j+)if(k=0)available
16、j=availablebakj;maxkj=maxbakkj;allocationkj=allocationbakkj;needkj=needbakkj;return;System.out.println("申请资源时各进程的状态=");System.out.println("MAXALLOCATIONNEEDAVAILABLE");for(inti=0;i<m;i+)System.out.print("P"+i+":");for(intj=0;j<n;j+)if(maxij>9)System.o
17、ut.print(maxij+"");elseSystem.out.print(""+maxij+"");System.out.print("");for(intj=0;j<n;j+)if(allocationij>9)System.out.print(allocationij+"");elseSystem.out.print(""+allocationij+"");System.out.print("");for(intj
18、=0;j<n;j+)if(needij>9)System.out.print(needij+"");elseSystem.out.print(""+needij+"");if(i=0)System.out.print("");for(intj=0;j<n;j+)if(availablej>9)System.out.print(availablej+"");elseSystem.out.print(""+availablej+"");
19、System.out.println();System.out.println("=完成状态展示=");System.out.println();while(num1>0)/如果num1=0则说明依次循环下来没有能够满足的进程,因此中止for(inti=0;i<m;i+)if(parami=false)/只有没有被满足的进程才可以进入内层循环parami=true;for(intj=0;j<n;j+)tarj=availablej-needij;if(tarj<0)parami=false;if(parami=true)for(intk=0;k<n;k+)availablek=availablek+allocat
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 事业单位岗位聘任合同模板
- 个人房产抵押融资合同模板
- 个人向企业借款合同书(版)
- 中欧科技创新技术许可合同探讨
- 一篇文章读懂应届生就业合同细则
- 二手房销售合同实施细则
- 个人与公司租车服务合同
- 个人股权转让合同书模板
- 买卖合同撤销协议范本
- 个人贷款合同范本
- 肿瘤护士培训课件
- 新课标体育与健康水平二教案合集
- 2025届高考语文一轮复习知识清单:古代诗歌鉴赏
- 医疗器材申请物价流程
- 我的消防文员职业规划
- 2025年公司品质部部门工作计划
- 2024年世界职业院校技能大赛高职组“市政管线(道)数字化施工组”赛项考试题库
- 华为研发部门绩效考核制度及方案
- CSC资助出国博士联合培养研修计划英文-research-plan
- 《环境管理学》教案
- 2025年蛇年年度营销日历营销建议【2025营销日历】
评论
0/150
提交评论