欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

使用java實現(xiàn)銀行家算法-創(chuàng)新互聯(lián)

銀行家算法核心

成都創(chuàng)新互聯(lián)專注骨干網(wǎng)絡(luò)服務(wù)器租用十年,服務(wù)更有保障!服務(wù)器租用,德陽機房托管 成都服務(wù)器租用,成都服務(wù)器托管,骨干網(wǎng)絡(luò)帶寬,享受低延遲,高速訪問。靈活、實現(xiàn)低成本的共享或公網(wǎng)數(shù)據(jù)中心高速帶寬的專屬高性能服務(wù)器。

先尋找滿足系統(tǒng)當(dāng)前剩余的資源量(avaliable )>=進程運行所需的資源數(shù)的進程(need),再假設(shè)這個進程安全校驗是成功的,當(dāng)這個進程運行完畢后,釋放資源后,現(xiàn)在系統(tǒng)當(dāng)前剩余的資源(avaliable)=avaliable+該線程之前已分配的資源(allocation) ,將該節(jié)點進程設(shè)為處理時忽略進程,再以上條件為前提進行安全校驗。
安全校驗:一個進程獲得資源后,運行完畢,釋放之前分配的資源,其他的線程可以繼續(xù)運行,而不會造成死鎖。
這樣就會產(chǎn)生回溯。

滿足條件:是否存在一個進程運行所需的資源數(shù)<=當(dāng)前系統(tǒng)剩余的資源數(shù)。

查找操作:先判斷回溯的步長(層數(shù))是否等于節(jié)點的個數(shù),如果等于說明已經(jīng)找到了正確路徑,返回真給上一層,如果不滿足,則看一下此層是否存在滿足條件的節(jié)點,如果存在,這一該節(jié)點為回溯點開始查找操作。如果都不存在,說明上一層的回溯點不是我們要找的節(jié)點,返回假給上一層,并回溯回到上一層節(jié)點,將忽略標(biāo)記清楚,換另一個滿足條件的節(jié)點繼續(xù)在進行查找操作。

先以一個滿足條件的節(jié)點進行忽略標(biāo)記(下一次查找時可忽略此節(jié)點),回溯的步長加一,再進行查找操作(下一層)。

import java.util.Arrays;

public class BanksTest {
  // 用于存儲預(yù)操作后的資源變化
  static int[] new_Avaliable = null;
  // 用于存儲預(yù)操作的完成度
  static boolean[] new_finish = null;
  // 用于保存最終的進程執(zhí)行順序,初始化為非法進程-1
  static int right[] = { -1, -1, -1, -1, -1 };

  public static void main(String[] args) {
    // 大需求量
    int[][] max = { { 7, 5, 3 }, { 3, 2, 2 }, { 9, 0, 2 }, { 2, 2, 2 }, { 4, 3, 3 } };
    // 當(dāng)前系統(tǒng)可用資源量
    int[] avaliable = { 3, 3, 2 };
    // 每個進程運行還需資源量
    int[][] need = new int[5][3];
    // 每個進程已分配的資源量
    int[][] allocation = { { 0, 1, 0 }, { 2, 0, 0 }, { 3, 0, 2 }, { 2, 1, 1 }, { 0, 0, 2 } };
    // 用于第一深度預(yù)判的初始化
    boolean finish[] = { false, false, false, false, false };
    // 獲取每個進程運行時還需的資源量
    for (int i = 0; i < max.length; i++) {
      for (int j = 0; j < max[i].length; j++) {
        need[i][j] = max[i][j] - allocation [i][j];
      }
    }
    // 創(chuàng)建遞歸深度
    int deep = 0;
    // 調(diào)用回溯遞歸算法
    deepCheck(avaliable, allocation, need, finish, deep, right);
    int i = 0;
    // 查看最終的安全序列的值,看是否存在初始的非法進程,如果存在,則說明該案例不存在安全的進程執(zhí)行順序
    for (; i < right.length; i++) {
      if (right[i] == -1) {
        break;
      }
    }
    if (i < right.length) {
      System.out.println("該案例不存在安全的進程執(zhí)行順序");
      return;
    }
    // 打印安全的執(zhí)行順序
    for (int j = 0; j < right.length; j++) {
      System.out.println(right[j]);

    }

  }

  // 完全遞歸回溯查找安全順序
  public static boolean deepCheck(int[] avaliable, int[][] allocation, int[][] need, boolean finish[], int deep,
      int right[]) {
    int j = 0;
    boolean flog = false;
    // 如果深度為進程的個數(shù)數(shù)說明已經(jīng)查找到頭了,說明上一深度的進程是安全節(jié)點。因為上一深度的進程滿足了當(dāng)前資源數(shù)大于或等于該進程運行所需的資源數(shù),且為安全序列中最后一個節(jié)點。
    if (deep == need.length) {
      return true;
    }
    // 遍歷所有節(jié)點進程開始查找,直到找到安全校驗成功的的節(jié)點進程
    for (int i = 0; i < need.length; i++) {
      // 對于未被標(biāo)記的進行校驗,已被標(biāo)記的為已被列為安全節(jié)點所以無需再進行校驗
      if (!finish[i]) {
        // 判斷當(dāng)前的節(jié)點進程的剩余的資源量,是否滿足運行所需的資源量
        for (j = 0; j < avaliable.length; j++) {
          // 不滿足
          if (need[i][j] > avaliable[j]) {
            break;
          }
        }
        // 不滿足則處理下一個節(jié)點進程
        if (j < avaliable.length) {
          continue;
        } else {
          // 滿足情況
          // 復(fù)制會被修改的前提條件,已便于當(dāng)前進程校驗不成功時,可以恢復(fù)前提條件,開始下一個節(jié)點進程的校驗
          new_Avaliable = Arrays.copyOf(avaliable, avaliable.length);
          new_finish = Arrays.copyOf(finish, finish.length);
          // 假設(shè)當(dāng)前節(jié)點進程是可以校驗成功的節(jié)點進程,修改該進程運行完畢后釋放之前分配的進程。
          for (j = 0; j < new_Avaliable.length; j++) {
            new_Avaliable[j] += allocation[i][j];
          }
          // 假設(shè)標(biāo)記當(dāng)前為校驗成功的安全節(jié)點進程,下一深度查找時會忽略此進程。
          new_finish[i] = true;
          // 增加深度
          deep++;
          // 以上假設(shè)為前提,進行下一深度的安全校驗判斷其他所剩余進程是否可以繼續(xù)運行,而不造成死鎖。
          flog = deepCheck(new_Avaliable, allocation, need, new_finish, deep, right);
          // 如果進行安全校驗后為真,說明當(dāng)前進程是我們要找的進程
          if (flog) {
            // 保存到最終進程執(zhí)行序列的數(shù)組中
            right[--deep] = i;
            break;
          }

        }

      }

    }
    // 安全校驗成功
    if (flog) {
      return true;
    } else {
      // 安全校驗失敗
      // 清楚之前的假設(shè)標(biāo)記
      new_finish[right[--deep]] = false;
      return false;
    }

  }
}

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站aaarwkj.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

新聞標(biāo)題:使用java實現(xiàn)銀行家算法-創(chuàng)新互聯(lián)
分享路徑:http://aaarwkj.com/article8/dpehip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計、網(wǎng)站排名、軟件開發(fā)、網(wǎng)站制作網(wǎng)站導(dǎo)航、用戶體驗

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司
日韩欧美精品一区二区三区四区| 国产一区999精品在线| 国产极品嫩模在线观看91| 97人妻人人澡人人添人人爽| 国产一区二区三区在线精品专区| 国产精品一区2区3区| 亚洲午夜精品理论在线不卡| 国产一区二区高清在线| 国产老太婆精品久久久久| 国产日韩欧美亚洲中文国| 日本黄色高清视频一区| 精品日韩av一区二区三区| 先锋影音女同中文字幕| 中文字幕日本人妻乱码| 国产自拍偷拍自拍偷拍| 性生活免费在线观看视频| 青娱乐青青草91在线| 国产麻豆精品传媒av| 久久人热视频这里只有精品| 日日夜夜天天操天天干| 人妻少妇被猛烈进入久久精品| 欧美日韩精品成人大片| 永久免费观看黄色录像| 色婷婷av一区二区三| 国产一级黄色性生活片| 国语少妇高潮对白在线| 亚洲日本一区二区高清在线| 福利在线视频一区二区| 欧美日韩精品在线二区| 日韩毛片免费看美日韩毛片| 99久久免费精品老色| 天堂av在线一区二区三区| 日韩久久精品五月综合| 国产日韩欧美亚洲中文| 亚洲精品高清一区二区| 亚洲第一狼人天堂在线| 久久夜色一区二区三区| 日本一区两区三区不卡视频 | 亚洲第一区二区国产精品| 国产精品中文一区二区三区| 五月婷婷丁香在线观看|