用java编写的银行家算法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

for (int j = 0; j<3;j++) { Work[j]=Work[j]+Alloction[i][j]; } Finish[i]=true;//当前进程 能满足时 S[count]=i;//设置当前序列排 号 count++;//满足进程数加1 for(int j=0;j<3;j++) { System.out.print(Alloction[i][j]+" } ");
Available[i]=Available[i]+Request[i]; Alloction[num][i]=Alloction[num] [i]+Request[i]; Need[num][i]=Need[num] [i]+Request[i]; } System.out.println("回滚到原来状态"); printSystemVariable(); break;//跳出循环 } } }
public void setRequest() {//设置请求资源量Request boolean T=true; System.out.println("资源请求过程!"); System.out.println("请输入请求资源的进程编 号:"); do { T=true; num= in.nextInt();//设置全局变量进程编号num System.out.println("请输入请求各资源的数量:"); for (int j = 0; j < 3; j++) { System.out.print(Name[j]+"="); Request[j] = in.nextInt(); } //银行家算法 if (Request[0] <= Need[num][0] && Request[1] <= Need[num][1] && Request[2] <= Need[num][2]) //判断Request是否小于Need { if (Request[0] <= Available[0] && Request[1] <= Available[1] && Request[2] <= Available[2]) //判断Request是否小于Alloction { for (int i = 0; i < 3; i++) { Available[i]=Available[i]Request[i]; Alloction[num] [i]=Alloction[num][i]+Request[i]; Need[num][i]=Need[num][i]Request[i]; } } else {
public void printSystemVariable() { System.out.println("此时资源分配量如下:"); System.out.println("进程 "+" Max "+" Alloction "+" Need "+" Available "); for(int i=0;i<5;i++) { System.out.print("P"+i+" "); for(int j=0;j<3;j++) { System.out.print(Max[i][j]+" "); } System.out.print(" "); for(int j=0;j<3;j++) { System.out.print(Alloction[i][j]+" "); } System.out.print(" "); for(int j=0;j<3;j++) { SyFra Baidu bibliotektem.out.print(Need[i][j]+" "); } System.out.print(" "); if(i==0) { for(int j=0;j<3;j++) { System.out.print(Available[j]+" "); } } System.out.println(); } }
package 银行家算法; import java.util.Scanner; public class Banker { public static char[] Name = {'A', 'B', 'C'}; public static int[] Available = {3,3,2}; public int[][] Max = {{7,5,3},{3,2,2},{9,0,2}, {2,2,2},{4,3,3}}; public int[][] Alloction ={{0,1,0},{2,0,0}, {3,0,2},{2,1,1},{0,0,2}}; public int[][] Need = {{7,4,3},{1,2,2},{6,0,0}, {0,1,1},{4,3,1}}; public int[] Request = new int[3]; public int[] Work = new int[3]; int num = 0;//进程编号 Scanner in = new Scanner(System.in); public static void main(String[] args) { boolean Choose = true; String C; Scanner in = new Scanner(System.in); Banker T = new Banker(); System.out.println("银行家算法"); T.printSystemVariable(); T.SecurityAlgorithm(); while (Choose == true) { T.setRequest(); System.out.println("是否还要进行请求: y/n?"); C = in.nextLine(); if (C.endsWith("n")) { Choose = false; } } }
System.out.print(" "); for(int j=0;j<3;j++) { System.out.print(Need[i] [j]+" "); } System.out.print(" "); for(int j=0;j<3;j++) { System.out.print(Work[j]+" "); } System.out.println(); } } circle++;//循环圈数加1 if(count==5)//判断是否满足所有进程需要 { System.out.print("此时存在一个安全序 列:"); for (int i = 0; i<5;i++)//输出安全序列 { System.out.print("P"+S[i]+" "); } System.out.println("故当前可分配!"); break;//跳出循环 } if(count<circle)//判断完成进程数是否小于循环 圈数 { count=5; System.out.println("当前系统处于不安全 状态,故不存在安全序列。"); for (int i = 0; i < 3; i++) {
while (count < 5) { for (int i = 0; i < 5; i++) //依次判断三个 进程是否满足条件 { if (Finish[i]==false&&Need[i][0]<=Work[0]&&Need[i][1] <=Work[1]&&Need[i][2]<=Work[2])//判断条件 { System.out.print("P"+i+" "); for (int k = 0; k < 3; k++) { System.out.print(Work[k]+" "); } System.out.print(" ");
System.out.println("当前没有足够的 资源可分配,进程P" + num + "需等待。"); T=false; System.out.println("请从新输入请求 资源的进程编号:"); } } else { System.out.println("请从新输入请求资源 的进程编号:"); T=false; } } while(T==false); if(T==true) { printSystemVariable(); SecurityAlgorithm(); //进行安全性检测 } } public void SecurityAlgorithm()//安全算法 { boolean[] Finish = {false, false, false,false,false};//初始化Finish int count = 0;//完成进程数 int circle=0;//循环圈数 int[] S=new int[5];//安全序列 for (int i = 0; i < 3; i++) //设置工作向量 { Work[i] = Available[i]; } System.out.println("下面进行安全性检测:"); System.out.println("进程 "+" Work "+" Alloction "+" Need "+"Work+Available ");
}
相关文档
最新文档