浏览 4006 次
锁定老帖子 主题:C语言模拟银行家算法
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2009-04-07
#include <stdio.h> #include <stdlib.h> #include<time.h> #define randomize() srand((unsigned)time(NULL)) //定义一个宏 #define uint unsigned int #define uchar unsigned char #define RES 3 //系统资源数 #define MAX_P 5 //进程数 //PCB结构体定义部分 typedef struct PCB { /* 进程标识符 */ uint id; /* 每一个进程需求M类资源的最大数目 */ uint max[RES]; /* 已分配的资源数 */ uint allocation[RES]; /* 当前进程还需要的资源个数 */ uint need[RES]; /* 当前进程请求资源 */ uint request[RES]; /* 标志进程是否可执行完成 */ uint finish; }; /* 系统中R资源的个数 */ uint available[RES]; uint work[RES]; uchar finish[RES],flag; struct PCB process[MAX_P]; void init(void); bool check(void); void out(); void main(void) ///////////主函数///////////// { int i,j; init(); printf("===============banker===============\n"); out(); while(!flag) { randomize(); //随机函数 for(i=0;i<MAX_P;i++) { process[i].finish = 0; for(j=0;j<RES;j++) { process[i].request[j] = rand()%5;//i进程申请j资源随机个 if(process[i].request[j] < process[i].need[j]) if(process[i].request[j] < available[j]) { work[j] = available[j]; //finish = 0; if(check()) //安全性检查 { available[j] = available[j] - process[i].request[j]; process[i].allocation[j] = process[i].allocation[j] + process[i].request[j]; process[i].need[j] = process[i].need[j] - process[i].request[j]; printf("distribute....\n"); out(); flag = 1; } else printf("wait...\n"); } else printf("wait...\n"); else printf(".....error...\n"); } } for(i=0;i<MAX_P;i++) for(j=0;j<RES;j++) { } } } void out(void) { //printf("##############资源情况###################\n"); printf("\n进程\tMax\tAllocation\tNeed\tAvailable\tFinish\n"); printf("----------------------------------------------------------------|\n"); int i; for(i=0;i<MAX_P;i++) { printf("%d\t%d,%d,%d\t%d,%d,%d\t\t%d,%d,%d\t%d,%d,%d\t\t%d |\n",process[i].id,process[i].max[0],process[i].max[1],process[i].max[2],process[i].allocation[0],process[i].allocation[1],process[i].allocation[2],process[i].need[0],process[i].need[1],process[i].need[2],available[0],available[1],available[2],process[i].finish); if(i==4) printf("----------------------------------------------------------------|\n"); } } /* 安全性检查 */ bool check(void) { int i,j; for(i=0;i<MAX_P;i++) for(j=0;j<RES;j++) { if(!process[i].finish && process[i].need[j]<=work[j]) { work[j] += process[i].allocation[j]; process[i].finish = 1; printf("...not safe....\n"); } else printf("...not safe....\n"); } out(); return true; } /** 初始化 **/ void init(void) { int i = 0; int j = 0; flag = 0; randomize(); //随机产生各资源的个数 for(i=0;i<RES;i++) available[i] = rand()%5+6; //初始化各进程 for(i=0;i<MAX_P;i++) { //初始化进程ID process[i].id = i+1; //各进程对资源的最大需求,随机产生:0~10 //已分配0个资源 //请求资源0个 //尚需 max - allocation for(j=0;j<RES;j++) { process[i].max[j] = rand()%10; process[i].allocation[j] = 0; process[i].request[j] = 0; process[i].need[j] = process[i].max[j]-process[i].allocation[j]; } } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-04-07
囧rz,刚刚看过,你这一写,我发现我已经忘记了。。。。
|
|
返回顶楼 | |
发表时间:2009-10-22
我还是一个新手,不很懂……
但还是谢谢分享…… |
|
返回顶楼 | |