银行家算法的java编程实现

  • 格式:doc
  • 大小:53.00 KB
  • 文档页数:8

下载文档原格式

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

/*死锁避免和死锁检测模拟程序【银行家算

法】网络工程06-3班学号:310609040308*/

import java.util.*;

public class TestTheBanker {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

TheBanker tb = new TheBanker();

tb.deadlockAvoidance();//死锁避免

int gate = 1;

while(gate!=0){

tb.deadlockDetection();//死锁检测

System.out.println("如果您要继续分配资源请输入\"1\",退出请输入\"0\"");

System.out.print("您输入的值为:");

gate = scanner.nextInt();

System.out.println();

}

System.out.println("使用愉快!期待您下次使用!");

}

}

class TheBanker{

int m;

int n;

int[][] max;

int[][] maxbak;//备份用

int[][] allocation;

int[][] allocationbak;//备份用

int[][] need;

int[][] needbak;//备份用

int[] available;

int[] availablebak;//备份用

public TheBanker(){

Scanner s = new Scanner(System.in);

System.out.println("初始化==============");

System.out.print("请依次输入系统中的【进程数】和【资源类型数】:");

m = s.nextInt();

n = s.nextInt();

max =new int[m][n];

maxbak = new int[m][n];

allocation = new int[m][n];

allocationbak = new int[m][n];

need = new int[m][n];

needbak = new int[m][n];

available = new int[n];

availablebak = new int[n];

for(int i=0;i

System.out.print("请依次输入第" + i + "进程的各资源数:");

for(int j=0;j

max[i][j] = s.nextInt();

maxbak[i][j] = max[i][j];

}

}

for(int i=0;i

System.out.print("请依次输入第" + i + "进程中已分配资源的数量:");

for(int j=0;j

allocation[i][j] = s.nextInt();

allocationbak[i][j] = allocation[i][j];

}

}

for(int i=0;i

for(int j=0;j

need[i][j] = max[i][j] - allocation[i][j];

needbak[i][j] = need[i][j];

}

}

for(int i=0;i

System.out.print("请输入系统中第" + i + "种资源的剩余量:");

available[i] = s.nextInt();

availablebak[i] = available[i];

}

System.out.println("初始化结果=============");

System.out.println(" MAX

ALLOCATION NEED AVAILABLE");

for(int i=0;i

System.out.print("P" + i + ": ");

for(int j=0;j

if(max[i][j]>9){//如果是两位数,控制格式,在数字前少输出一个" "。

System.out.print(max[i][j] + " ");

}else{

System.out.print(" " + max[i][j] + " ");

}

}

System.out.print(" ");

for(int j=0;j

if(allocation[i][j]>9){

System.out.print(allocation[i][j] + " ");

}else{

System.out.print(" " + allocation[i][j] + " ");

}

}

System.out.print(" ");

for(int j=0;j

if(need[i][j]>9){

System.out.print(need[i][j] + " ");

}else{

System.out.print(" " + need[i][j] + " ");

}

}

if(i==0){

System.out.print(" ");

for(int j=0;j

if(available[j]>9){

System.out.print(available[j] + " ");

}else{

System.out.print(" " + available[j] + " ");

}

}

}

System.out.println();

}

System.out.println("=====完成初始化=====");

System.out.println();

}

public void deadlockAvoidance(){

int[] security = new int[m];

boolean[] param = new boolean[m];

int[] tar = new int[n];

int count = 0;

int num1 = m+1;//计数器,每循环一遍所有进程就自减1

int num2 = m;//计数器,每遇到一个被满足的进程就自减1