请给一段银行家算法的C语言代码
时间: 2023-11-17 11:05:40 浏览: 134
以下是银行家算法的C语言代码示例:
```
#include <stdio.h>
#include <stdbool.h>
int n; // 进程数
int m; // 资源种类数
int available[100];
int allocation[100][100];
int need[100][100];
int request[100];
int work[100];
bool finish[100];
bool isSafe() {
int i, j, k;
// 初始化 work 向量
for (i = 0; i < m; i++) {
work[i] = available[i];
}
// 初始化 finish 向量
for (i = 0; i < n; i++) {
finish[i] = false;
}
// 找到一个安全序列
for (i = 0; i < n; i++) {
bool found = false;
for (j = 0; j < n; j++) {
if (!finish[j]) {
bool satisfy = true;
for (k = 0; k < m; k++) {
if (need[j][k] > work[k]) {
satisfy = false;
break;
}
}
if (satisfy) {
found = true;
finish[j] = true;
for (k = 0; k < m; k++) {
work[k] += allocation[j][k];
}
break;
}
}
}
if (!found) {
return false;
}
}
return true;
}
void requestResource(int pid) {
int i, j;
// 检查请求是否合法
for (i = 0; i < m; i++) {
if (request[i] > need[pid][i]) {
printf("Error: Process requests exceeding its claim\n");
return;
}
if (request[i] > available[i]) {
printf("Error: Available resource less than process request\n");
return;
}
}
// 尝试分配资源
for (i = 0; i < m; i++) {
available[i] -= request[i];
allocation[pid][i] += request[i];
need[pid][i] -= request[i];
}
// 判断是否安全
if (isSafe()) {
printf("Request is granted\n");
} else {
// 回滚操作
printf("Request cannot be granted\n");
for (i = 0; i < m; i++) {
available[i] += request[i];
allocation[pid][i] -= request[i];
need[pid][i] += request[i];
}
}
}
int main() {
int i, j;
// 输入进程数和资源种类数
printf("Enter number of processes: ");
scanf("%d", &n);
printf("Enter number of resource types: ");
scanf("%d", &m);
// 输入 available 向量
printf("Enter available vector: ");
for (i = 0; i < m; i++) {
scanf("%d", &available[i]);
}
// 输入 allocation 矩阵
printf("Enter allocation matrix: ");
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
scanf("%d", &allocation[i][j]);
}
}
// 输入 need 矩阵
printf("Enter need matrix: ");
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
scanf("%d", &need[i][j]);
}
}
// 输入请求的进程号和请求向量
printf("Enter pid: ");
scanf("%d", &i);
printf("Enter request vector: ");
for (j = 0; j < m; j++) {
scanf("%d", &request[j]);
}
// 尝试分配资源
requestResource(i);
return 0;
}
```
阅读全文