操作系统 银行家调度

实验作业

 

#include <iostream>
//银行家
using namespace std;
const int maxn = 1e2 + 7, almaxn = 1e5 + 7;

int available[maxn], n, m;
bool avl[maxn];

struct djksr{
    string id;
    int allocation[maxn] = { almaxn };
    int need[maxn] = { almaxn };
}DJksr[almaxn];

int main()
{
    // freopen("input.txt", "r", stdin);
    // freopen("output.txt", "w", stdout);
    int n, m;
    cout << "请求向量总数:" << endl;
    cin >> n;
    cout << "资源种类:" << endl;
    cin >> m;
    cout << "可利用资源向量(不同种类资源用空格分隔):" << endl;
    for (int i = 0; i < m; i++) cin >> available[i];
    cout << "分别输入请求向量ID 已分配资源向量 还需要分配资源向量" << endl;
    for (int i = 0; i < n; i++) {
        cout << "" << i + 1 << "项进程:" << endl;
        cin >> DJksr[i].id;
        for (int j = 0; j < m; j++) cin >> DJksr[i].allocation[j];
        for (int j = 0; j < m; j++) cin >> DJksr[i].need[j];
    }
    int qid;
    cout << "输入请求进程编号 请求资源向量" << endl;
    cin >> qid;
    for (int i = 0; i < m; i++) {
        int x;
        cin >> x;
        available[m] -= x;
        DJksr[qid].need[i] -= x;
        DJksr[qid].allocation[i] += x;
    }
    for (int j = 0; j < n; j++) {
        if (!avl[j]) {
            bool bl = 1;
            for (int k = 0; k < m; k++)
            {
                if (available[k] < DJksr[j].need[k]) {
                    bl = 0;
                    break;
                }
                if (bl) {
                    for (int k = 0; k < m; k++)    available[k] += DJksr[j].allocation[k];
                    cout << DJksr[j].id << endl;
                    avl[j] = 1;
                    j = -1;
                    break;
                }
            }
        }
    }
    for (int j = 0; j < n; j++) {
        if (!avl[j])
            cout << "不安全" << endl;
    }
    return 0;
}


/*
3
1
3
p1 5 5
p2 2 2
p3 9 2

1 2
*/

 

posted @ 2021-05-22 15:08  Aboicde  阅读(66)  评论(0)    收藏  举报