银行家算法,Java实现

本文介绍了银行家算法的原理,详细阐述了该算法在Java中的实现过程,并提供了代码示例。通过安全性算法检查,确保资源分配的安全性,避免系统出现死锁。
摘要由CSDN通过智能技术生成

Java实现银行家算法

原理

设 Request;是进程Pi的请求向量,如果 Requesti[j] = K,表示进程Pi需要K个Rj类型的资源。当Pi发出资源请求后,系统按下述步骤进行检査:
  (1) 如果 Requesti[j] ≤ Need[i,j]便转向步骤(2);否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。
  (2) 如果 Requesti[j] ≤ Available[j],便转向步骤(3);否则,表示尚无足够资源,Pi须等待。
  (3) 系统试探着把资源分配给进程Pi,并修改下面数据结构中的数值
   Available[i] = Available[j] - Requesti[j];
   Allocation[i,j] = Allocation[i,j] + Requesti[j];
   Need[i,j] = Need[i,j] - Requesti[j];
  (4) 系统执行安全性算法,检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程Pi,以完成本次分配;否则,将本次的试探分配作废,恢复原来的资源分配状态,让进程Pi等待

代码

/**
 * Copyright (c).2019-2019,
 * Filename: BankerAlgorithm1
 * Author: 
 * Date:2019/11/6
 * Description:
 */
import java.util.Scanner;
class Banker1 {
    int[] num_source;//银行家所拥有的资源数
    int[][] max_need_couse;//各进程所需要各资源的最大量
    int[][] have_num;//各进程已拥有各资源的量
    int[][] need_num;//各进程仍需要各资源的量
    int[] p;//已分配出的资源数
    int[] s;//系统剩余资源数
    public Banker1(int[] a,int[][]b,int [][]c,int[][]d,int[]p,int[] s){
        this.num_source = a;
        this.max_need_couse = b;
        this.have_num = c;
        this.need_num = d;
        this.p = p;
        this.s = s;
    }
    public void display(){
       for (int i = 0;i<need_num.length;i++){
           System.out.println("进程"+i+"仍需要各资源的量为:");
           for(int j= 0;j<need_num[i].length;j++){
               System.out.print(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值