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("系统安全"); } }