银行家算法的java编程实现_第1页
银行家算法的java编程实现_第2页
银行家算法的java编程实现_第3页
银行家算法的java编程实现_第4页
银行家算法的java编程实现_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、/*死锁避免与死锁检测模拟程序【银行家算法】                  import java.util.*;public class TestTheBanker public static void main(String args)    Scanner scanner = new Scanner(System.in);   TheBanker tb = new T

2、heBanker();   tb.deadlockAvoidance();/死锁避免   int gate = 1;   while(gate!=0)      tb.deadlockDetection();/死锁检测     System.out.println("如果您要继续分配资源请输入"1",退出请输入"0"");     System.out.pr

3、int("您输入的值为:");     gate = scanner.nextInt();     System.out.println();      System.out.println("使用愉快!期待您下次使用!");class TheBankerint m;int n;int max;int maxbak;/备份用int allocation;int allocationbak;/备份用int need;int needbak

4、;/备份用int available;int availablebak;/备份用public TheBanker()     Scanner s = new Scanner(System.in);   System.out.println("初始化=");    System.out.print("请依次输入系统中的【进程数】和【资源类型数】:");   m = s.nextInt();   n = s.nextInt(); 

5、    max =new intmn;     maxbak = new intmn;     allocation = new intmn;     allocationbak = new intmn;     need = new intmn;     needbak = new intmn;     available =

6、 new intn;     availablebak = new intn;          for(int i=0;i<max.length;i+)/初始化向量MAX、ALLOCATION、NEED、AVAILABLE     System.out.print("请依次输入第" + i + "进程的各资源数:");     for(int j=0

7、;j<maxi.length;j+)        maxij = s.nextInt();        maxbakij = maxij;                    for(int i=0;i<allocation.length;i+)     Sys

8、tem.out.print("请依次输入第" + i + "进程中已分配资源的数量:");     for(int j=0;j<allocationi.length;j+)        allocationij = s.nextInt();        allocationbakij = allocationij;       

9、        for(int i=0;i<need.length;i+)     for(int j=0;j<needi.length;j+)        needij = maxij - allocationij;        needbakij = needij;        

10、0;           for(int i=0;i<available.length;i+)     System.out.print("请输入系统中第" + i + "种资源的剩余量:");     availablei = s.nextInt();     availablebaki = availablei;   

11、       System.out.println("初始化结果=");     System.out.println("         MAX          ALLOCATION          NEED

12、60;          AVAILABLE");          for(int i=0;i<m;i+)     System.out.print("P" + i + ": ");     for(int j=0;j<n;j+)     

13、60;  if(maxij>9)/如果是两位数,控制格式,在数字前少输出一个" "。         System.out.print(maxij + " ");        else         System.out.print(" " + maxij + " ");  &#

14、160;               System.out.print("     ");     for(int j=0;j<n;j+)        if(allocationij>9)         System.out.print(all

15、ocationij + " ");        else           System.out.print(" " + allocationij + " ");                  System.out.print("&

16、#160;    ");     for(int j=0;j<n;j+)        if(needij>9)         System.out.print(needij + " ");        else       

17、0;   System.out.print(" " + needij + " ");                  if(i=0)        System.out.print("     ");        f

18、or(int j=0;j<n;j+)         if(availablej>9)          System.out.print(availablej + " ");         else            System.out.

19、print(" " + availablej + " ");                           System.out.println();               System.out.println(&qu

20、ot;=完成初始化=");     System.out.println();public void deadlockAvoidance()     int security = new intm;     boolean param = new booleanm;   int tar = new intn;   int count = 0;   int num1 = m+1;/计数器,每循环一遍所有进程就

21、自减1   int num2 = m;/计数器,每遇到一个被满足的进程就自减1     while(num1>0)/如果num1=0,则说明依次循环下来没有能够满足的进程,因此中止       for(int i=0;i<m;i+)     if(parami=false)/只有没有被满足的进程才可以进入内层循环      parami = true;  

22、    for(int j=0;j<n;j+)             tarj = availablej - needij;       if(tarj<0)        parami = false;          &

23、#160;         if(parami=true)                  for(int k=0;k<n;k+)                  availabl

24、ek = availablek + allocationik;                                    securitycount = i;/记录以满足的进程号      

25、;            count+;                  num2-;                     

26、     num1-;    while(num2=0)&&(num1>0)     System.out.print("【安全序列】为:");     for(int i=0;i<m;i+)      if(i=(m-1)       System.out.print("P" +

27、 securityi);      else       System.out.print("P" + securityi + "->");                     System.out.println();   &#

28、160; System.out.println("=【死锁避免】结束=");     System.out.println();     return;        while(num1=0)&&(num2>0)     System.out.println("抱歉!没有【安全序列】!");     System.

29、out.println("=【死锁避免】结束=");     System.out.println();     return;             public void deadlockDetection()   Scanner sc = new Scanner(System.in);   int key;   

30、;  int security = new intm;     boolean param = new booleanm;   int temp = new intn;   int tar = new intn;   int count = 0;   int num1 = m+1;/计数器,每循环一遍所有进程就自减1   int num2 = m;/计数器,每遇到一个被满足的进程就自减1     for(i

31、nt i=0;i<m;i+)/回复死锁检测前的状态    for(int j=0;j<n;j+)         maxij = maxbakij;     allocationij = allocationbakij;     needij = needbakij;     availablej = availablebakj;  &

32、#160;          System.out.println();   System.out.println("死锁检测=");   System.out.println("如果您此时想申请系统资源请输入【进程号】和"+n+"种【资源量】,系统将帮您判断是否可行。");   System.out.print("您输入的进程号为:");   key = sc.ne

33、xtInt();   for(int i=0;i<n;i+)    System.out.print("您要申请的第"+i+"种资源的数量为:");    tempi = sc.nextInt();      for(int i=0;i<n;i+)    allocationkeyi = allocationkeyi + tempi;    needkeyi = n

34、eedkeyi - tempi;    if(needkeyi<0)     System.out.println("申请资源大于所需资源,系统【不能】分配资源!");     for(int k=0;k<m;k+)/回复死锁检测前的状态      for(int j=0;j<n;j+)       if(k=0)  &

35、#160;     availablej = availablebakj;              maxkj = maxbakkj;       allocationkj = allocationbakkj;       needkj = needbakkj;    

36、0;              return;        availablei = availablei - tempi;    if(availablei<0)     System.out.println("申请资源大于系统所剩资源,系统【不能】分配资源!");     for(int

37、 k=0;k<m;k+)/回复死锁检测前的状态      for(int j=0;j<n;j+)       if(k=0)        availablej = availablebakj;              maxkj = maxbakkj;  

38、0;    allocationkj = allocationbakkj;       needkj = needbakkj;                   return;            System.out.println("申请资源

39、时各进程的状态=");     System.out.println("         MAX          ALLOCATION          NEED         

40、0; AVAILABLE");          for(int i=0;i<m;i+)     System.out.print("P" + i + ": ");     for(int j=0;j<n;j+)        if(maxij>9)      

41、   System.out.print(maxij + " ");        else         System.out.print(" " + maxij + " ");                  System.out.print(

42、"     ");     for(int j=0;j<n;j+)        if(allocationij>9)         System.out.print(allocationij + " ");        else   

43、0;       System.out.print(" " + allocationij + " ");                  System.out.print("     ");     for(int j=0;j<n;j+)  

44、      if(needij>9)         System.out.print(needij + " ");        else           System.out.print(" " + needij + " ");   &

45、#160;              if(i=0)        System.out.print("     ");        for(int j=0;j<n;j+)         if(availablej>9) &

46、#160;        System.out.print(availablej + " ");         else            System.out.print(" " + availablej + " ");       

47、0;                   System.out.println();               System.out.println("=完成状态展示=");     System.out.println();   while(num1>

48、;0)/如果num1=0,则说明依次循环下来没有能够满足的进程,因此中止       for(int i=0;i<m;i+)     if(parami=false)/只有没有被满足的进程才可以进入内层循环      parami = true;      for(int j=0;j<n;j+)       

49、0;     tarj = availablej - needij;       if(tarj<0)        parami = false;                    if(parami=true)    

50、;              for(int k=0;k<n;k+)                  availablek = availablek + allocationik;                       &

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论