#include <stdio.h>
#define NUM_OF_RESOURCES 3
#define NUM_OF_PROCESSES 5
int available[NUM_OF_RESOURCES] = {10, 5, 7};
int maximum[NUM_OF_PROCESSES][NUM_OF_RESOURCES] = {
{7, 5, 3},
{3, 2, 2},
{9, 0, 2},
{2, 2, 2},
{4, 3, 3}
};
int allocation[NUM_OF_PROCESSES][NUM_OF_RESOURCES] = {
{0, 1, 0},
{2, 0, 0},
{3, 0, 2},
{2, 1, 1},
{0, 0, 2}
};
int need[NUM_OF_PROCESSES][NUM_OF_RESOURCES];
// 初始化进程还需要的资源数量
void init_need() {
for (int i = 0; i < NUM_OF_PROCESSES; i++) {
for (int j = 0; j < NUM_OF_RESOURCES; j++) {
need[i][j] = maximum[i][j] - allocation[i][j];
}
}
}
// 检查是否有足够的资源分配给进程
int check(int pid, int request[]) {
for (int i = 0; i < NUM_OF_RESOURCES; i++) {
if (request[i] > available[i] || request[i] > need[pid][i]) {
return -1; // 分配失败
}
}
return 0; // 分配成功
}
// 分配资源给进程
void allocate(int pid, int request[]) {
for (int i = 0; i < NUM_OF_RESOURCES; i++) {
available[i] -= request[i];
allocation[pid][i] += request[i];
need[pid][i] -= request[i];
}
}
// 释放进程占用的资源
void release(int pid, int release[]) {
for (int i = 0; i < NUM_OF_RESOURCES; i++) {
available[i] += release[i];
allocation[pid][i] -= release[i];
need[pid][i] += release[i];
}
}
int main() {
// 初始化进程还需要的资源数量
init_need();
// 测试银行家算法
int pid = 1;
int request[NUM_OF_RESOURCES] = {1, 0, 2};
if (check(pid, request) == 0) {
allocate(pid, request);
printf("分配成功!\n");
} else {
printf("分配失败!\n");
}
int release[NUM_OF_RESOURCES] = {0, 0, 2};
release(pid, release);
return 0;
}