import java.util.Scanner;
public class Bank {
int Available[];//可利用资源向量
int Max[][];//最大需求矩阵
int Allocation[][];//分配矩阵
int Need[][];//需求矩阵
int Request[];//请求向量
int Work[];//工作变量,记录可用资源
boolean Finish[];//工作变量,记录进程是否执行完
static int a;
static int b;
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner sc=new Scanner(System.in);
System.out.println("请输入资源种类数");
int j=sc.nextInt();
System.out.println("请输入进程数");
int i=sc.nextInt();
System.out.println("请输入系统拥有的总资源数");
int c=sc.nextInt();
for(int b=0;b
{
for(int a=0;a
{
System.out.println("请输入第"+b+" 个进程第"+a+"类需要多少资源");
int k=sc.nextInt();
System.out.println("请输入第"+b+" 个进程第"+a+"类分配到多少资源");
int d=sc.nextInt();
System.out.println("请输入第"+b+" 个进程第"+a+"类还需要多少资源");
int e=sc.nextInt();
Bank ban=new Bank(k,b,a,i,j,c,d,e);
ban.bank();
}
}
sc.close();
}
public Bank(int k,int b,int a,int i,int j,int c,int d,int e)//赋值传参
{
Available=new int[j];
Max=new int[i][j];
Allocation=new int[i][j];
Need=new int[i][j];
Request=new int[j];
Available[a]=c;
Request[a]=k;
Allocation[b][a]=d;
Need[b][a]=e;
Work=new int[j];
Finish=new boolean[i];
Work[a]=Available[a];
Finish[b]=false;
}
@SuppressWarnings("unused")
void bank()//银行家算法实现
{
if(Request[a]<=Need[b][a])//进程申请的资源有没有超过声明的最大量
{
if(Request[a]<=Available[a])//判断资源够不够
{
Available[a]= Available[a]- Request[a];
Allocation[b][a]= Allocation[b][a]+ Request[b];
Need[b][a]= Need[b][a]- Request[a];//试分配
while(true)
{
if(Finish[b]=false&&Need[b][a]<=Work[a])//执行安全算法
{
Work[a]=Work[a]+Allocation[b][a];
Finish[b]=true;
System.out.println("第"+b+"个进程顺利执行完毕");
continue;
}
else
{
if(Finish[b]=true)
{
System.out.println("系统处于安全状态");
}
else
{
System.out.println("系统处于不安全状态");
}
break;
}
}
}
else
{
System.out.println("系统资源不够,需等待");
}
}
else
{
System.out.println("申请资源出错");
}
}
}