public class TestBank {
public static void main(String[] args){
//各线程最大需求量
int[][] claim = new int[][]{{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};
//各线程已分配资源
int[][] allocation = new int[][]{{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};
int i,j,k,l = 0,count = 0,m = 0;
//各进程仍需要的各类资源
int[][] C_A = new int[][]{{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}};
//存放预分配成功的线程
int[] result = new int[]{-1,-1,-1,-1,-1};
//当前可分配资源
int[] currentAvail = new int[]{3,3,2};
System.out.println("各进程对各资源的最大需求:");
System.out.println(" A "+"B "+"c ");
for(i=0;i<5;i++){
System.out.print("p"+i);
for(j=0;j<3;j++){
System.out.print(" "+claim[i][j]);
C_A[i][j] = claim[i][j] - allocation[i][j];
}
System.out.println();
}
System.out.println("各进程已分配到的各类资源:");
System.out.println(" A "+"B "+"c ");
for(i=0;i<5;i++){
System.out.print("p"+i);
for(j=0;j<3;j++){
System.out.print(" "+allocation[i][j]);
}
System.out.println();
}
System.out.println("各进程仍需的各类资源数量:");
System.out.println(" A "+"B "+"c ");
for(i=0;i<5;i++){
System.out.print("p"+i);
for(j=0;j<3;j++){
System.out.print(" "+C_A[i][j]);
}
System.out.println();
}
while(result[l]==-1){
for(k=0;k<5;k++){
if(result[k]==-1){
for(j=0;j<3;j++)
if(C_A[k][j]<=currentAvail[j]&&C_A[k][j]>=0){
currentAvail[j] = currentAvail[j] + allocation[k][j];
m++;
if(m==3){
result[l] = k;
m = 0;
}
}
}else
break;
l++;
}
for(i=0;i<1;i++)
if(result[i] != -1){
System.out.println("p"+result[i]+"->");
count++;
}
l=0;
}
if(count==5)
System.out.println("系统安全!上行所示为其中一个安全序列");
else
System.out.println("系统安全");
}
}