c模拟银行家资源分配算法
#include #define PNUMBER 5//进程个数 #define SNUMBER 3//资源种类个数//资源的种类,三种 char stype[SNUMBER]={'A','B','C'}; //各种资源的总数量,a种资源总10,b种资源总5,c种资源总7 int avalable[SNUMBER]={10,5,7}; //每个进程对应的完成进程需要的各种类型的资源需求量,静态值 int pmax[PNUMBER][SNUMBER]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}}; //每个进程已经分配的资源情况,动态值 int allocation[PNUMBER][SNUMBER]={{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}}; //每一个进程还需要的资源 int pneed[PNUMBER][SNUMBER]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}}; //临时的数组 int request[SNUMBER]; //当前正在分配资源的进程 int pindex=0; //显示每一个进程对资源拥有的现状 void showdate(); //接受进程分配的请求 void accepetRequest(); //模拟分配 void SimMllocation(int pindex); //回滚 void rollback(int pindex); //安全性检查 int checkIsSafe(); int main() { //主逻辑int exit=0; //显示每一个进程现状 showdate(); do { //接受进程分配的请求 accepetRequest(); //模拟分配资源 SimMllocation(pindex); //显示现在资源现状 showdate(); //检查是否存在安全序列,数据要保证至少一个进程能完成分配 if(checkIsSafe()==0) { //当前进程不存在安全序列,当前进程数据回滚 rollback(pindex); } printf("是否继续0/1\n"); scanf("%d",&exit); }while(exit==1); return 0; }//显示每一个进程对资源拥有的现状 void showdate() { int index=0; int index_=0; printf("当前资源情况.....\n"); printf("资源类类型\t资源数量\n"); for(index=0; index) { printf("%c\t\t%d\n",stype[index],avalable[index]); }printf("\n\n每一个进程所需要资源的最大值.........\n\n"); printf("进程编号\t资源类型A\t资源类型B\t资源类型C\n"); for(index=0; index) { printf("%d\t\t",index); for(index_=0; index_) { printf("%d\t\t",pmax[index][index_]); } printf("\n"); }printf("\n\n每一个进程所分配的情况......\n\n"); printf("进程编号\t资源类型A\t资源类型B\t资源类型C\n"); for(index=0; index) { printf("%d\t\t",index); for(index_=0; index_) { printf("%d\t\t",allocation[index][index_]); } printf("\n"); }printf("\n\n每一个进程还需要的资源的情况......\n\n"); printf("进程编号\t资源类型A\t资源类型\t资源类型C\n"); for(index=0; index) { printf("%d\t\t",index); for(index_=0; index_) { printf("%d\t\t",pneed[index][index_]); } printf("\n"); } printf("---------------------------------------------------------------------------------------------\n"); }void accepetRequest() { int index=0; printf("请输入你要分配资源的进程编号(0~%d)\n",PNUMBER-1); //需要分配资源的进程 scanf("%d",&pindex); //输入需要各种资源的具体数量 for(index=0; index",temp[index]); } printf("\n"); return 1; }
【c模拟银行家资源分配算法】
推荐阅读
- 三门问题(蒙提霍尔悖论)分析与Golang模拟
- 投石机可连续抛射石头【Algodoo|投石机可连续抛射石头【Algodoo | 物理模拟】
- spring5源码系列--循环依赖|spring5源码系列--循环依赖 之 手写代码模拟spring循环依赖
- 给未来的银行家-自己
- Code|Code Forces-681C(模拟题,优先队列,设计STL)
- jQuery之模拟实现$().animate()(上)
- 一个简单的TCP模拟实现(一)
- Injection|Injection For Xcode11 macOS 10.15 Catalina 亲测可用iOS模拟器UI界面调试实时刷新工具
- 康佳电视进入无线调试
- 【css灵感】模拟3D地球