C语言的Banker算法银行家算法是一种资源分配和死锁避免算法,它在执行“s状态”检查以寻找潜在活动并确定是否应该允许分配继续之前,模拟所有资源的预定最大可能数量的资源分配。 为什么叫银行家算法?银行家的算法之所以如此命名,是因为它在银行业被用来决定是否授权向个人贷款。假设一家银行有n个账户持有人,每个账户持有人的个人余额都是s。当有人申请贷款时,银行首先从其拥有的总金额中扣除贷款金额,只有当余额大于s时,银行才批准贷款。这样做是因为如果每个账户持有人都来取钱,银行就可以简单地这样做。 换句话说,银行绝不会以一种妨碍其满足所有客户需求的方式来安排资金。银行将在任何时候都努力保持安全。 利用以下数据结构,实现银行家算法: 假设系统中有n个进程和m种不同的资源。 可用:
马克斯:
Max[i, j] = k。 分配:
需要:
现在分配给流程Pi的资源由Allocation标识,而流程Pi为完成其工作可能需要的额外资源由need标识。 银行家算法由安全算法和资源请求算法组成。 安全算法下面描述了确定系统是否处于安全状态的方法: 资源请求算法让Request代表流程Pi请求数组。进程Pi请求k个资源类型Rj的实例,用Request [j] = k表示。当进程Pi请求资源时,会发生以下情况: 银行家的算法源代码输出: 以下是安全序列P1 - > P3 - > P4 - > P0 - > P2 .......................................................进程在2.32秒内执行按任意键继续。 解释:
下一个话题
C语言FIFO页面替换算法
|