银行家算法c银行家算法 c++版
银行家算法c 时间:2022-02-23 阅读:(
)
银行家算法 c++版
我这有c版本的,你可以用extern "C"{ } 来兼容C++。 #include <stdio.h> #include <conio.h> typedef struct Available { int Avai_Num; struct Available *next; }Available; /* 系统当前可用资源,使用链表实现 */ Available *Creat_Available(int R_Num) /* R_Num资源的数目 */ { int i; struct Available *p, *q, *head; q = malloc(sizeof(struct Available)); head = q; p = q; printf("Please input Available resource of current systme
"); for(i = 0; i < R_Num; i++) { q = malloc(sizeof(struct Available)); p->next = q; p = q; scanf("%d",&p->Avai_Num); } p = head; for(i = 0; i < R_Num; i++) { p = p->next; printf("R[%d]= %d
",i, p->Avai_Num); } return head; } /* 生成系统当前可用资源链表 */ void free_Available(struct Available *head, int R_Num) { struct Available *p, *q; int i; q = head; p = q; q = q->next; for(i = 0; i <= R_Num; i++) { free(p); p = q; q = q->next; } } typedef struct Allocation { int Allo_Num; struct Allocation *next; }Allocation; /* 进程已分配资源 */ Allocation *Creat_Allocation(int P_Num,int n) { int i; struct Allocation *p, *q, *head; q = malloc(sizeof(struct Allocation)); head = q; p = q; printf("Please input Allocation of P%d
", P_Num); for(i = 0; i < n; i++) { q = malloc(sizeof(struct Allocation)); p->next = q; p = q; scanf("%d",&p->Allo_Num); } p = head; for(i = 0; i < n; i++) { p = p->next; printf("R[%d]= %d
",i, p->Allo_Num); } return head; } /* 生成进程已分配资源链表 */ void free_Allocation(struct Allocation *head, int R_Num) { struct Allocation *p, *q; int i; q = head; p = q; q = q->next; for(i = 0; i <= R_Num; i++) { free(p); p = q; q = q->next; } } typedef struct Max { int Max_Num; struct Max *next; }Max; /* 进程最大资源 */ Max *Creat_Max(int P_Num,int n) { int i; struct Max *p, *q, *head; q = malloc(sizeof(struct Max)); head = q; p = q; printf("Please input Max of P%d
", P_Num); for(i = 0; i < n; i++) { q = malloc(sizeof(struct Max)); p->next = q; p = q; scanf("%d",&p->Max_Num); } p = head; for(i = 0; i < n; i++) { p = p->next; printf("R[%d]= %d
",i, p->Max_Num); } return head; } /* 生成进程最大资源链表 */ void free_Max(struct Max *head, int R_Num) { struct Max *p, *q; int i; q = head; p = q; q = q->next; for(i = 0; i <= R_Num; i++) { free(p); p = q; q = q->next; } } typedef struct Need { int Need_Num; struct Need *next; }Need; /* 进程运行结束还需资源 */ Need *Creat_Need(struct Max *M_Head, struct Allocation *A_Head,int P_Num,int n) { int i; struct Need *p, *q, *head; struct Max *Max_Temp; struct Allocation *Allo_Temp; Max_Temp = M_Head; Allo_Temp = A_Head; q = malloc(sizeof(struct Need)); head = q; p = q; for(i = 0; i < n; i++) { Max_Temp = Max_Temp->next; Allo_Temp = Allo_Temp->next; q = malloc(sizeof(struct Need)); p->next = q; p = q; p->Need_Num = Max_Temp->Max_Num - Allo_Temp->Allo_Num; } p = head; for(i = 0; i < n; i++) { p = p->next; printf("P_Need R[%d]= %d
",i, p->Need_Num); } return head; } /* 生成进程运行结束还需资源链表 */ void free_Need(struct Need *head, int R_Num) { struct Need *p, *q; int i; q = head; p = q; q = q->next; for(i = 0; i <= R_Num; i++) { free(p); p = q; q = q->next; } } typedef struct Resource { struct Allocation *Allo_R; struct Max *Max_R; struct Need *Need_R; struct Resource *next; int Finish; }Resource; Resource *Creat_Resource(int P_Num, int R_Num) { int i; struct Resource *p, *q, *head; q = malloc(sizeof(struct Resource)); head = q; p = q; printf("Creat initial state of Resource
"); for(i = 0; i < P_Num; i++) { q = malloc(sizeof(struct Resource)); p->next = q; p = q; p->Allo_R = Creat_Allocation(i,R_Num); p->Max_R = Creat_Max(i, R_Num); p->Need_R = Creat_Need( p->Max_R,p->Allo_R, P_Num, R_Num); p->Finish = 0; } p = head; return head; } /* 进程资源状况 */ void free_Resource(struct Resource *head, int R_Num) { struct Resource *p, *q; int i; q = head; p = q; q = q->next; for(i = 0; i <= R_Num; i++) { free(p); p = q; q = q->next; } } void free_memory(struct Resource *Resource_head, struct Available *Available_head, int P_Num, int R_Num) { struct Resource *p, *q; int i; q = Resource_head; p = q; q = q->next; for(i = 0; i <= P_Num; i++) { p = q; q = q->next; free_Need(p->Need_R, R_Num); free_Max(p->Max_R, R_Num); free_Allocation(p->Allo_R, R_Num); } q = Resource_head; p = q; free_Resource(p, R_Num); free_Available(Available_head, R_Num); } pair(struct Resource *Compair_Process, struct Available *Available_Head, int R_Num) /*比较当前的资源是否能满足进程q的运行,如可以返回1*/ { struct Need *Current_Resource_Needed; struct Available *Temp_Available_Resource; int i; int temp; Current_Resource_Needed = Compair_Process->Need_R; Temp_Available_Resource = Available_Head; temp = 1; for(i = 0; i < R_Num; i++) { Current_Resource_Needed = Current_Resource_Needed->next; Temp_Available_Resource = Temp_Available_Resource->next; temp = temp && (Current_Resource_Needed->Need_Num <= Temp_Available_Resource->Avai_Num ? 1 : 0); } return temp; } void change_available(struct Resource *Compair_Process, struct Available *Available_Head, int R_Num) { /*修改进程执行后的系统可用资源表*/ struct Allocation *Current_Resource_Allocated; struct Available *Temp_Available_Resource; int i; Current_Resource_Allocated = Compair_Process->Allo_R; Temp_Available_Resource = Available_Head; for(i = 0; i < R_Num; i++) { Current_Resource_Allocated = Current_Resource_Allocated->next; Temp_Available_Resource = Temp_Available_Resource->next; Temp_Available_Resource->Avai_Num = Current_Resource_Allocated- >Allo_Num + Temp_Available_Resource->Avai_Num; } } void print_available(struct Available *Available_Head, int R_Num) { /*输出系统可用资源表*/ struct Available *Temp_Available_Resource; int i; Temp_Available_Resource = Available_Head; for(i = 0; i < R_Num; i++) { Temp_Available_Resource = Temp_Available_Resource->next; printf("Available_R%d = %d
", i, Temp_Available_Resource->Avai_Num); } } void Safty_judgement(struct Resource *head, struct Available *Available_Head, int R_Num) { /*系统安全性判断*/ struct Resource *p, *q; int Safty; int one_can_finish; one_can_finish = 1; printf("
"); while(one_can_finish) { /*当这一次执行没有一个进程可以完成,时 退出*/ p = head; p = p->next; one_can_finish = 0; while(p) { /*进行一遍搜索*/ if(p->Finish == 1) p = p->next; else pair(p,Available_Head,R_Num) == 1) { change_available(p,Available_Head,R_Num); p->Finish = 1; one_can_finish = 1; /*如果有一个进程能完成,那么标识 one_can_finish为1*/ p = p->next; } else p = p->next; } } p = head; p = p->next; Safty = 1; /*假定当前状态是安全的*/ while(p) { if( p->Finish == 0) Safty = 0; /*如果有一个进程不能完成,那么把状态置 为不安全*/ p = p->next; } if(Safty) printf("The State is safety!"); else printf("Can not allocate the resource!"); } main() { struct Resource *Process_Head; struct Available *Available_Head; int P_Num, R_Num, i; printf("
"); printf("Please input Process_Number "); scanf("%d",&P_Num); printf("
"); printf("Please input Resource_Number "); scanf("%d", &R_Num); Available_Head = Creat_Available(R_Num); Process_Head = Creat_Resource(P_Num,R_Num); Safty_judgement(Process_Head, Available_Head, R_Num); free_memory(Process_Head, Available_Head, P_Num, R_Num); getch(); }
弘速云怎么样?弘速云是创建于2021年的品牌,运营该品牌的公司HOSU LIMITED(中文名称弘速科技有限公司)公司成立于2021年国内公司注册于2019年。HOSU LIMITED主要从事出售香港vps、美国VPS、香港独立服务器、香港站群服务器等,目前在售VPS线路有CN2+BGP、CN2 GIA,该公司旗下产品均采用KVM虚拟化架构。可联系商家代安装iso系统,目前推出全场vps新开7折,...
sharktech怎么样?sharktech (鲨鱼机房)是一家成立于 2003 年的知名美国老牌主机商,又称鲨鱼机房或者SK 机房,一直主打高防系列产品,提供独立服务器租用业务和 VPS 主机,自营机房在美国洛杉矶、丹佛、芝加哥和荷兰阿姆斯特丹,所有产品均提供 DDoS 防护。不知道大家是否注意到sharktech的所有服务器的带宽价格全部跳楼跳水,降幅简直不忍直视了,还没有见过这么便宜的独立服...
今天早上相比很多网友和一样收到来自Linode的庆祝18周年的邮件信息。和往年一样,他们会回顾在过去一年中的成绩,以及在未来准备改进的地方。虽然目前Linode商家没有提供以前JP1优化线路的机房,但是人家一直跟随自己的脚步在走,确实在云服务器市场上有自己的立足之地。我们看看过去一年中Linode的成就:第一、承诺投入 100,000 美元来帮助具有社会意识的非营利组织,促进有价值的革新。第二、发...
银行家算法c为你推荐
ipv6电视为什么IPv6电视软件不消耗上网流量呢机房360柴油发电机组启动电瓶充电小常识scriptmanagerScriptManager是什么excel大写金额EXCEL金额大写漏洞查询如何查找漏洞 从那做起国家法规数据库哪个常用的法律APP比较好用?公众号付费阅读为什么微信公众号阅读要收费?无处不在的意思,幸福无处不在,最适合才是最好是什么意思特斯拉model3降价特斯拉股价为何暴跌?erp系统教程如何使用ERP系统操作?
备案域名购买 已备案域名注册 cn域名价格 二级域名申请 duniu 大硬盘 Vultr 香港主机 mediafire下载工具 nerd 全能主机 卡巴斯基永久免费版 godaddy域名证书 165邮箱 静态空间 卡巴斯基试用版 河南移动m值兑换 天翼云盘 512mb 四川电信商城 更多