#include <stdio.h> int curr[5][5], maxclaim[5][5], avl[5]; int alloc[5] = {0, 0, 0, 0, 0};//已分配的资源 int maxres[5], running[5], safe=0; int count = 0, i, j, exec, r, p, k = 1; void main() { printf("\n请输入进程的个数: "); scanf("%d", &p); for (i = 0; i < p; i++) { running[i] = 1;//i进程运行 count++;//进程运行个数 } printf("\n请输入资源数目: "); scanf("%d", &r); printf("\n请输入各资源的数量:"); for (i = 0; i < r; i++) { scanf("%d", &maxres[i]); } printf("\n请输入已分配的资源表:\n"); for (i = 0; i < p; i++) { for(j = 0; j < r; j++) { scanf("%d", &curr[i][j]); } } printf("\n请输入最大资源表:\n"); for (i=0; i<p;i++) { for(j=0;j<r;j++) { scanf("%d", &maxclaim[i][j]); } } printf("\n各资源数量为s: "); for (i = 0; i < r; i++) { printf("\t%d", maxres[i]); } printf("\n已分配的资源表为:\n"); for (i = 0; i < p; i++) { for (j = 0; j < r; j++) { printf("\t%d", curr[i][j]);//输出已分配的资源 } printf("\n"); } printf("\n最大资源表为:\n"); for (i = 0; i < p; i++) {//p进程个数 for (j = 0; j < r; j++) {//r资源个数 printf("\t%d", maxclaim[i][j]);//输出最大资源表 } printf("\n"); } for (i = 0; i < p; i++) { for (j = 0; j < r; j++) { alloc[j] += curr[i][j];//一共分配了多少 } } printf("\n已分配的资源:"); for (i = 0; i < r; i++) { printf("\t%d", alloc[i]);//输出一共分配了多少资源 } for (i = 0; i < r; i++) { avl[i] = maxres[i] - alloc[i];//ke利用的资源 available } printf("\n可利用的资源:"); for (i = 0; i < r; i++) { printf("\t%d", avl[i]);//输出可利用的资源 } printf("\n"); //Main procedure goes below to check for unsafe state. while (count != 0) {//有进程执行 safe = 0;//初始化进程不安全 for (i = 0; i < p; i++) { if (running[i]) { exec = 1; for (j = 0; j < r; j++) { if (maxclaim[i][j] - curr[i][j] > avl[j]) { exec = 0;//需要的资源大于可利用的资源不能执行 break; } } if (exec) { printf("\n进程%d 正在运行\n", i + 1); running[i] = 0; count--;//运行个数减一 safe = 1;//处于安全状态 for (j = 0; j < r; j++) { avl[j] += curr[i][j];//更新可利用的资源 } break; } } } if (!safe) { printf("\n该进程不安全.\n"); break; } else { printf("\n该进程安全"); printf("\n可利用的资源为:"); for (i = 0; i < r; i++) { printf("\t%d", avl[i]); } printf("\n"); } } } /*SAMPLE OUTPUT ----------------- Enter the number of processes:5 进程个数 Enter the number of resources:4 资源数量 Enter Claim Vector:8 5 9 7 输入各种资源的数量 Enter Allocated Resource Table:输入已分配的资源表 2 0 1 1 0 1 2 1 4 0 0 3 0 2 1 0 1 0 3 0 Enter Maximum Claim Table:输入最大量 3 2 1 4 0 2 5 2 5 1 0 5 1 5 3 0 3 0 3 3 The Claim Vector is: 8 5 9 7 The Allocated Resource Table: 2 0 1 1 0 1 2 1 4 0 0 3 0 2 1 0 1 0 3 0 The Maximum Claim Table: 3 2 1 4 0 2 5 2 5 1 0 5 1 5 3 0 3 0 3 3 Allocated resources: 7 3 7 5已分配的资源 Available resources: 1 2 2 2可用的资源 Process3 is executing The process is in safe state Available vector: 5 2 2 5 Process1 is executing The process is in safe state Available vector: 7 2 3 6 Process2 is executing The process is in safe state Available vector: 7 3 5 7 Process4 is executing The process is in safe state Available vector: 7 5 6 7 Process5 is executing The process is in safe state Available vector: 8 5 9 7 ---------------------------------------------------------*/