//如果该进程已经得到过足够资源就不进行判断
if (!p.finish) {
//如果该进程不需要等待就直接返回false
if (!needWait§) {
return false;
}
}
}
return true;
}
private void mainOperation(PCB pcb) {
//运行到这说明该进程可以得到足够的资源,那么直接将该进程已分配的资源放回到系统中
//并将finish改为true
for (int i = 0; i < this.work.length; i++) {
this.work[i].num += pcb.allocation[i].num;
pcb.finish = true;
}
}
private boolean needWait(PCB pcb) {
//挨个判断此时pcb这个进程所需要的每个资源,如果need大于系统当前可分配资源,就说明需要等待
for (int i = 0; i < this.work.length; i++) {
if (this.work[i].num < pcb.need[i].num) {
return true;
}
}
return false;
}
}

测试数据及结果

======================================================================

数据


java实现银行卡号查询银行名称_java

import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print(“输入资源有几种:”);
int resKindNum = scan.nextInt();
Resources[] Available = new Resources[resKindNum];//系统总资源
System.out.println();
System.out.println(“输入每个系统资源名称、系统资源数量”);
for (int i = 0; i < Available.length; i++) {
System.out.println(“初始化第” + (i +1) + “个资源”);
System.out.println();
System.out.print(“资源名称:”);
String name = scan.next();
System.out.println();
System.out.print(“该资源数量:”);
int num = scan.nextInt();
Available[i] = new Resources(name, num);
System.out.println();
System.out.println(“第” + (i +1) + “个资源初始化完毕”);
System.out.println(“====================”);
}
System.out.println();
System.out.println(“系统资源初始化完毕,开始初始化进程”);
System.out.println();
System.out.print(“输入进程个数:”);
int pcbNums = scan.nextInt();
PCB[] pcbs = new PCB[pcbNums];
for (int i = 0; i < pcbNums; i++) {
System.out.println(“初始化第” + (i +1) + “个进程”);
System.out.println();
System.out.print(“输入进程名:”);
String name = scan.next();
System.out.println();
System.out.print(“输入该进程最大需求资源:”);
Resources[] max = new Resources[resKindNum];
int[] maxResNum = new int[resKindNum];
for (int j = 0; j < resKindNum; j++) {
maxResNum[j] = scan.nextInt();
}
for (int j = 0; j < max.length; j++) {
max[j] = new Resources(Available[j].name, maxResNum[j]);
}
System.out.println();
System.out.print(“输入该进程已分配资源数目:”);
Resources[] allocation = new Resources[resKindNum];
int[] allocReesNum = new int[resKindNum];
for (int j = 0; j < resKindNum; j++) {
allocReesNum[j] = scan.nextInt();
}
for (int j = 0; j < allocation.length; j++) {
allocation[j] = new Resources(Available[j].name, allocReesNum[j]);
}
System.out.println();
//此时一个进程的所有需要的东西都已输入完毕
pcbs[i] = new PCB(name, max, allocation);
System.out.println(“第” + (i +1) + “个进程初始化完毕”);
System.out.println(“====================”);
}
System.out.println();
System.out.println(“所有进程初始化完毕,开始资源分配”);
System.out.println();
boolean key = true;
while (key) {
BetterBankerAlgorithm bankerAlgorithm = new BetterBankerAlgorithm(Available, pcbs);
bankerAlgorithm.resAllocation();
System.out.println();
System.out.println("是否需要再次申请资源输入: y or n ");
char ch = scan.next().charAt(0);
if (ch == ‘n’ || ch == ‘N’) {
key = false;
} else {
System.out.print(“输入要申请资源的进程名:”);
String name = scan.next();
System.out.println();
System.out.print(“输入要申请资源的数量:”);
int[] res = new int[resKindNum];
for (int i = 0; i < resKindNum; i++) {
res[i] = scan.nextInt();
}
System.out.println();
for (PCB p : pcbs
) {
p.finish = false;
if (p.name.equals(name)) {
for (int i = 0; i < p.allocation.length; i++) {
p.allocation[i].num += res[i];
}
}
}
System.out.println();
System.out.println(“再次申请资源完毕,开始资源分配”);
System.out.println();
}
}
}
}

结果


输入资源有几种:4

输入每个系统资源名称、系统资源数量

初始化第1个资源

资源名称:R1

该资源数量:6

第1个资源初始化完毕

====================

初始化第2个资源

资源名称:R2

该资源数量:7

第2个资源初始化完毕

====================

初始化第3个资源

资源名称:R3

该资源数量:12

第3个资源初始化完毕

====================

初始化第4个资源

资源名称:R4

该资源数量:12

第4个资源初始化完毕

====================

系统资源初始化完毕,开始初始化进程

输入进程个数:5

初始化第1个进程

输入进程名:P0

输入该进程最大需求资源:0 0 1 2

输入该进程已分配资源数目:0 0 1 2

第1个进程初始化完毕

====================

初始化第2个进程

输入进程名:P1

输入该进程最大需求资源:2 7 5 0

输入该进程已分配资源数目:2 0 0 0

第2个进程初始化完毕

====================

初始化第3个进程

输入进程名:P2

输入该进程最大需求资源:6 6 5 6

输入该进程已分配资源数目:0 0 3 4

第3个进程初始化完毕

====================

初始化第4个进程

输入进程名:P3

输入该进程最大需求资源:4 3 5 6

输入该进程已分配资源数目:2 3 5 4

第4个进程初始化完毕

====================

初始化第5个进程

输入进程名:P4

输入该进程最大需求资源:0 6 5 2

输入该进程已分配资源数目:0 3 3 2

第5个进程初始化完毕

====================

所有进程初始化完毕,开始资源分配

P0进程已得到足够资源

此时系统可用资源为:

====================

资源R1有2

资源R2有1

资源R3有1

资源R4有2

====================

P3进程已得到足够资源

此时系统可用资源为:

====================

资源R1有4

资源R2有4

资源R3有6

资源R4有6

====================

P4进程已得到足够资源

此时系统可用资源为:

====================

资源R1有4

资源R2有7

资源R3有9

资源R4有8

====================

P1进程已得到足够资源

此时系统可用资源为:

====================

资源R1有6

资源R2有7

资源R3有9

资源R4有8

====================

P2进程已得到足够资源

此时系统可用资源为:

====================

资源R1有6

资源R2有7

资源R3有12

资源R4有12

====================

系统处于安全状态

是否需要再次申请资源输入: y or n

Y

输入要申请资源的进程名:P2

输入要申请资源的数量:0 1 0 0

再次申请资源完毕,开始资源分配

P0进程已得到足够资源