银行家算法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(); }
香港服务器租用多少钱一个月?香港服务器受到很多朋友的青睐,其中免备案成为其特色之一。很多用户想了解香港云服务器价格多少钱,也有同行询问香港服务器的租赁价格,一些实际用户想要了解香港服务器的市场。虽然价格是关注的焦点,但价格并不是香港服务器的全部选择。今天小编介绍了一些影响香港服务器租赁价格的因素,以及在香港租一个月的服务器要花多少钱。影响香港服务器租赁价格的因素:1.香港机房选择香港机房相当于选择...
天上云服务器怎么样?天上云是国人商家,成都天上云网络科技有限公司,专注于香港、美国海外云服务器的产品,有多年的运维维护经验。世界这么大 靠谱最重,我们7*24H为您提供服务,贴心售后服务,安心、省事儿、稳定、靠谱。目前,天上云香港大带宽物理机服务器572元;20Mbps带宽!三网CN2线路,香港沙田数据中心!点击进入:天上云官方网站地址香港沙田数据中心!线路说明 :去程中国电信CN2 +中国联通+...
CloudCone的[2021 Flash Sale]活动仍在继续,针对独立服务器、VPS或者Hosted email,其中VPS主机基于KVM架构,最低每月1.99美元,支持7天退款到账户,可使用PayPal或者支付宝付款,先充值后下单的方式。这是一家成立于2017年的国外VPS主机商,提供独立服务器租用和VPS主机,其中VPS基于KVM架构,多个不同系列,也经常提供一些促销套餐,数据中心在洛杉...
银行家算法c为你推荐
离线包地图包包是什么牌子旺旺群发软件旺旺群发软件哪个比较好暴力破解rar怎么暴力破解rar密码?快速且有效的刷ip流量免费刷流量软件有哪些?哪个免费刷流量工具最好?netbios协议tcp/ip、ipx/spx、netbios这三个通信协议的区别comexception5种常见的Exception!java程序员招聘java程序员学出来工作好不好找,工资咋样?gas是什么意思GC什么意思cursorlocationsession("rs").cursorlocation=3是什么意思?网站客服代码怎么在网页用HTML代码设置QQ客服
百度云100as 一点优惠网 亚洲小于500m 本网站在美国维护 linux空间 河南移动邮件系统 微信收钱 umax120 免费phpmysql空间 华为k3 大化网 美国代理服务器 winserver2008r2 2016黑色星期五 认证机构 性能测试工具 winscpiphone 隐士ddos 堡垒主机 关闭空间申请 更多