銀行家演算法,c 實現

2021-08-08 22:46:31 字數 2888 閱讀 1262

在這個銀行家演算法裡面:

1.程序有初始資源data1

2.程序有最大需求資源data2

3.系統有未分配資源idata

4.當程序需要的最大資源被滿足,資源會被立刻**

5.程序數不會更新

本次的**僅滿足上面的要求

如果需要其他的要求,請適當修改**

改進方面:

1.可以修改未vector的陣列形式

2.如果程序數是會實時改變,請新增新的函式更新陣列data1,data2,然後呼叫函式處理data3即可

#include

#include

#include

using namespace std;

#define m 5

///定義結構

struct idata

; 函式 ///

//初始化資料集

void setdata(int da[m], int da2[m], int da3[m]);

//初始化資源集

void setidata(idata *item);

//排序資源數

void sortidata(idata *idata, queue

&ind);

void quicksort(idata *item, int m, int n);

//處理滿足需求的事務

bool getdata(int d3[m], idata *idata, queue

&ind, queue

&fu); //**資源 void freedata(idata *item, int d1[m], queue

&fu, stack

&st); //處理原有資料 void cleardata(int d1[m], int d2[m], int d3[m], stack

&fu, bool *&fl); //需要處理的程序數 void dep(bool *fl, queue

&ind); //迴圈 void dg(int d1[m], int d2[m], int d3[m], idata *id1, bool *f, queue

inde, queue

fu, stack

st); ///預處理/ void setarray1(bool *item); bool ***(bool *f); bool change(bool t1, bool t2); void dshow(idata *item); void ddshow(int da[m]); #include "bm.h" //初始化資料集 void setdata(int d1[m], int d2[m], int d3[m]) } */ cout << "輸入須分配的總資源數\n"; /* for (int i = 0; i < m; i++) } */ for (int i = 0; i < m; i++) } cout << "以初始化已分配的資源!\n"; return; } //初始化資源集 void setidata(idata *idata) cout << "已初始化未分配資源!\n"; return; } //排序資源數 void sortidata(idata *idata, queue

&ind) quicksort(l, 0, m - 1); for (int i = 0; i < m; i++) return; } void quicksort(idata *item, int m, int n) fu.pop(); } fu.pop(); if (!fu.empty()) else ind.pop(); } /* queue

test = fu; while (!test.empty()) */ return t1; } //**資源 void freedata(idata *item, int d1[m], queue

&fu, stack

&st) fu.pop(); } fu.pop(); //if (fu.empty())cout << "yes"; return; } //處理原有資料 void cleardata(int d1[m], int d2[m], int d3[m], stack

&st, bool *&fl) st.pop(); } return; } //需要處理的程序數 void dep(bool *fl, queue

&ind) } return ; } /遞迴實現 void dg(int d1[m], int d2[m], int d3[m], idata *id1, bool *f, queue

inde, queue

fu,stack

st) return; } /預處理 void setarray1(bool *item) bool ***(bool *f) return t2; } bool change(bool t1, bool t2) else if (t2==false) } } void dshow(idata *item) void ddshow(int da[m]) } //main/// #include "bm.h" int main() , , , , }; int data2[m][m] = , , , , };//安全模式 // int data2[m][m] = , , , , };//不安全模式 int data3[m][m]; idata id[m];//可用檢驗例項 1 2 2 1 1 bool flage[m]; queue

indeed; queue

full; stack

st; setarray1(flage); setdata(data1, data2, data3); setidata(id); // dg(data1, data2, data3, id, flage,indeed, full, st); / system("pause"); return 0; }

銀行家演算法 C

銀行家演算法.cpp 定義控制台應用程式的入口點。include stdafx.h include using namespace std define m 5 程序數 define n 3 資源數 define false 0 define true 1 int ailable n 系統可用資源數...

銀行家演算法

我們可以把作業系統看作是銀行家,作業系統管理的資源相當於銀行家管理的資金,程序向作業系統請求分配資源相當於使用者向銀行家貸款。為保證資金的安全,銀行家規定 1 當乙個顧客對資金的最大需求量不超過銀行家現有的資金時就可接納該顧客 2 顧客可以分期貸款,但貸款的總數不能超過最大需求量 3 當銀行家現有的...

銀行家演算法

銀行家演算法 banker s algorithm 是乙個避免死鎖 deadlock 的著名演算法,是由艾茲格 迪傑斯特拉在1965年為t.h.e系統設計的一種避免死鎖產生的演算法。它以銀行借貸系統的分配策略為基礎,判斷並保證系統的安全執行。就像我們從銀行貸快一樣,首先銀行會考慮到我們有沒有償還能力...