现在的位置: 首页 > 综合 > 正文

bank

2013年01月06日 ⁄ 综合 ⁄ 共 1378字 ⁄ 字号 评论关闭
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("系统安全");
	}
}

 

抱歉!评论已关闭.