基于c语言的银行家算法模拟实现
设置系统资源数目为3,并发进程最大数量为10;程序开始即表示并发进程同时运行,用户可指定相应的进程申请一定数量的资源,直到所有进程完成或用户主动退出。并发进程的数量以及资源最大需求,已分配资源数量均需用户自己定义,且每次申请之后会将结果返回,成功则将安全性检查表与安全序列一并输出。
源码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define source_num 3 // 每个进程所需的资源的种类数量
#define Thread_max 10 //可容纳的最多的进程数量
int Max_Need[Thread_max][source_num]; //所有进程所需要的资源的最大数目
int Allocation[Thread_max][source_num]; //所有进程已经分配到的资源的数目
int tmp_Available[source_num];//剩余资源数目备份
int current_Allocation[Thread_max][source_num];// 已分配的资源数量备份
int Need[Thread_max][source_num]; //所有进程还需要的设备的数目
int current_Need[Thread_max][source_num];//需要资源数量备份
int current_Available[Thread_max][source_num]; //记录分配完之后,此时系统的可用资源数目
int Work[Thread_max][source_num]; //记录运行完成之后,系统中各个资源的数目
int Available[source_num]; //系统中剩余的资源数量
int finish[Thread_max]; //存放所有进程的状态。
int que[Thread_max]; //用于存放安全队列。
int Thread_num;
int RQ[source_num];
//初始化函数,对Max,Need,Available,Allocation进行初始化。
void init() {
printf("请输入系统中各类资源的数目总和:\n");
for (int i = 0; i < source_num; i++)
scanf("%d", &Available[i]);
printf("\n");
do {
printf("请输入进程的数量:\n");
scanf("%d", &Thread_num);
} while (Thread_num > 10);
printf("\n");
printf("请输入各个进程运行对各个程序的最大需求:\n");
for (int i = 0; i < Thread_num; i++) {
for (int j = 0; j < source_num; j