首页 > 编程知识 正文

银行家算法例题,银行家算法是一种什么算法

时间:2023-05-04 13:24:31 阅读:37303 作者:60

c % E8 % af % ad % E8 % A8 % 80 % E5 % AE % 9e7% 8e % B0 % e9 % 93 % B6 % E8 % a1 % 8c % E5 % AE % B6 % E7 % AE % 97 % E6。 e % 9a % E4 % B9 % 89 % E3 % 82 % E6 % 83 % B3 % E6 % a5 % B3 % E5 % 258 % bb % E8 % E6 % 25 % 20ae % E6 % 9d % a5 % % E5 % a4 % a7 % E5 % 87 % ba % E7 % 89 % a4 % be7 % a9 % 84 % 20《计算机操作系统》 % E4 % b8 % aa % 202 % E6 % A8 % a1 % E6 % 8b % % E8 % 81 % E5 % b8 % E5 % b8 % 83 % E7 % BD % e9 % a2 % E7 % 9b % ae7 % E8 % A8 % E7 %9A8 % E7 %9A8 %9A8 %9A8 % A8 % A8 % A8 4 % E6 % E6 % B4 % E6 % 87 % 20 % E5 % 88 % a4 % E6 % 96 % ad % E6 % a1 % E4 % B6 % E6 % 80 % E4 % B9 % E8 % BF % 99 % ba % E7 % AE % 80 % ee % 20y % E6 % 95 % B0 % E6 % 8d % ae5 % 8f % 82 % E8 % 80 % 20p 121 % 204.% e9 % 93 % B6 % E8 % a1 % unt % 203 % 20 %2F3 % E7 % B1 % 25 % 2088 % a9 % E7 % 94 % A8 % E8 % b5 % 84 % E6 % E5 % 91 % e9 % 87 % 25 fint % 20 allocation % E7 % AE % 97 % E5 % 87 % ba % E6 % 9d % a5int % 25 % 20 % a9 % 98 % b5int % 20 need % 5b pcount % 5d % 5b scount e9 % 87 % 8c % E7 % bb % 99 ABC % E4 % b8 % E7 % B1 % bb % E8 % b5 % E6 % ba % 205 % 88 % 86 % e9 % 85 % 8d % E8 % a1 % A8 001 % 202 p23 % 2026 % 200 % 200 p32 % 2010 % 201 p40 % 200 % 2024 % 203 % 25 % 20 oid % 20 initializedata % 28 % 29 % 3b % 2f % 2f % a1 % E7 % AE % 97 % E6 % 9c % 80 % E5 % a4 % e9 % 80 % E6 % B1 % 82 % E6 % B0 % e9 % 87 % 25 % 20a % 3db % 20 % E8 % BF 7 % E7 % AE % 97 % E6 % B3 % 95 % 2c % E5 % BD % 93 % E5 % 89 % E6 % 98 % af % E5 % a6 % E5 % a4 % E4 % ba8e % 20 % E6 % 0 heck finish % 28 int % 20 finish % 5b scount % 5d % 29 % 3b % 2f % E5 % 90 % e9 % 87 % 8f % E7 % 9b % b8 % E5 % 8a0% 29 % 339 NUS % 2084 % E6 % ba % 90 % E8 % af % B7 % E6 % B1 % 82 % 20p : % E8 % BF % 9b % E7 % A8 % E8 % E7 % B3 % E8 % af % t % 20请求% 5b计数% 5d % 20 % 206 % E6 % 8f % 90 % E7 % a4 % E7 % 9a % 84 % E8 % af % B7 % E6 % B1 % 82 void % 20 Reid 5 % AE % B6 % E7 % AE % 97 % E6 % B3 % 95 % E7 % 9a % 84 % E6 % 95 % B0 % 25 % 20b printf % 28 % 27 % 3d % 3d % 3d % 3d % 3d % 2f % E5 % AE % 89 % E5 % 85 % A8 % E6 % 80 % a7 % E6 % a3 % 80 % E6 % 9f % a5 checkssssssion % 20e6% ba % 90 %7B1 % 2c0% 2 shsh Han % 203 % E8 % af % B7 % E8 % b5 % 84 % E6 % ba % 90 %7B1 % 2c0%2C2 %7dint % 20 apply2% 5b scount % 5d % 20 % 3d % 20

资源检查Request <= Need才能执行步骤2if (!Equals(Request, Need[P])) {printf("进程P%d,Request:%d %d %d > Need:%d %d %d 申请失败,所需资源数超过宣布最大值!n", P, Request[0], Request[1], Request[2], Need[P][0], Need[P][1], Need[P][2]);return 0;}//步骤2 进行资源检查Request <= Available才能执行步骤3if (!Equals(Request, Available)) {printf("进程P%d,Request:%d %d %d > Available:%d %d %d 申请失败,尚无足够资源,该进程需要等待!n", P, Request[0], Request[1], Request[2], Available[0], Available[1], Available[2]);return 0;}printf("进程P%d,Request:%d %d %d <= Need:%d %d %dn", P, Request[0], Request[1], Request[2], Need[P][0], Need[P][1], Need[P][2]);printf("进程P%d,Request:%d %d %d <= Available:%d %d %d n", P, Request[0], Request[1], Request[2], Available[0], Available[1], Available[2]);//步骤3 试分配资源给进程PMinus(Available, Request);//Available -= RequestAdd(Allocation[P],Request);//Allocation += RequestMinus(Need[P], Request);//Need -= Request//步骤4 安全性检查int Safestate = CheckSafe();if (Safestate) {return Safestate;//分配后处于安全状态 分配成功}//分配后处于不安全状态 分配失败,本次分配作废,回复原来的资源分配状态Add(Available, Request);//Available += RequestMinus(Allocation[P], Request);//Allocation -= RequestAdd(Need[P], Request);//Need += Requestreturn Safestate;}//带命令提示符提示的请求void RequestShowMsg(int P, int R[Scount]) {//进程P 申请资源Request{1,0,2}printf("n模拟分配资源:P%d申请资源 %d %d %dn======================n",P, R[0], R[1], R[2]);int State = Request(P, R);if (State) {printf("本次资源分配成功!n");ShowData(0);}else {printf("本次资源分配失败!进程P%d需要等待n",P);}}//安全性算法,当前是否处于安全状态int CheckSafe() {printf("开始安全性检查:n");//步骤1 设置两个向量int Finish[Pcount] = { 0 };//是否被处理过,初始值全为False,被检查过才置为Trueint Work[Scount] = { 0 };//工作向量Add(Work, Available);//首先让Work = Available//步骤2 从进程集合寻找符合下列条件的进程//Finish[i] = false;//Need[i,j] <= Work[j];for (int i = 0; i < Pcount; i++) {if (Finish[i])continue;//已经标记为True就跳过if (!Equals(Need[i], Work))continue;//Need[i,j] > Work[j] 就跳过。//上述条件成立,执行步骤3Add(Work, Allocation[i]);//Work += Allocation;Finish[i] = 1;//Finish[i]=True;printf("P%d进程,Work=%d %d %d,Finish=true,安全状态n", i, Work[0], Work[1], Work[2]);i = -1;//返回步骤2}//步骤4 判断Finishif (CheckFinish(Finish)) {printf("安全状态检查完毕:【Finish全为true,系统处于安全状态】n");return 1;//全为True}printf("安全状态检查完毕:【Finish存在False,系统处于不安全状态】n");return 0;//存在False}//检查标志所有都为True,是返回1 不是返回0int CheckFinish(int Finish[Pcount]) {for (int i = 0; i < Pcount; i++) {if (Finish[i] == 0) return 0;}return 1;}//查看当前资源分配表void ShowData(int line) {printf("MaxAllocaNeedAvailablen");for (int i = 0; i < Pcount; i++) {printf("p%d:t", i);for (int j = 0; j < Scount; j++) {printf("%d ", Max[i][j]);}printf("t");for (int j = 0; j < Scount; j++) {printf("%d ", Allocation[i][j]);}printf("t");for (int j = 0; j < Scount; j++) {printf("%d ", Need[i][j]);}if (line == i) {printf("t");for (int j = 0; j < Scount; j++) {printf("%d ", Available[j]);}}printf("n");}}//计算最大需求数量void CalcMaxMatrix() {for (int i = 0; i < Pcount; i++) {for (int j = 0; j < Scount; j++) {Max[i][j] = Need[i][j] + Allocation[i][j];}}}//向量相加 a = a+bvoid Add(int* a, int b[Scount]) {for (int i = 0; i < Scount; i++) {a[i] = a[i] + b[i];}}//向量相减 a = a-bvoid Minus(int* a, int b[Scount]) {for (int i = 0; i < Scount; i++) {a[i] = a[i] - b[i];}}//资源比较 a<=b 返回1 a>b 返回0int Equals(int a[Scount], int b[Scount]) {for (int i = 0; i < Scount; i++) {if (a[i] > b[i]) return 0;}return 1;}

偷懒for循环所以使用了C++编译器。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。