#include#define PNUMBER 5//进程个数#define SNUMBER 3//资源种类个数//资源的种类,三种char stype[SNUMBER]={ 'A','B','C'};//各种资源的总数量,a种资源总10,b种资源总5,c种资源总7int 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 ",temp[index]); } printf("\n"); return 1;}