/Banker-algorithm

Banker algorithm by c++

Primary LanguageC++

Banker-algorithm

Banker algorithm by c++

背景简介

银行家算法(Banker’s Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉(Edsger Wybe Dijkstra)在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。

在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求时,客户应及时归还。银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。在这样的描述中,银行家就好比操作系统,资金就是资源,客户就相当于要申请资源的进程。

银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。为实现银行家算法,系统必须设置若干数据结构。 要解释银行家算法,必须先解释操作系统安全状态和不安全状态。 安全序列是指一个进程序列{P1,…,Pn}是安全的,即对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和。

安全状态 如果存在一个由系统中所有进程构成的安全序列P1,…,Pn,则系统处于安全状态。安全状态一定是没有死锁发生。

不安全状态 不存在一个安全序列。不安全状态不一定导致死锁。

运行

windows环境

  1. 选择IDE,如code blocks,新建工程,将代码和数据复制到相应文件夹内运行。

mac环境

  1. 选择IDE,方法同上
  2. sublime text + 控制台。 下载项目后,前往main.cpp文件所在路径,在控制台输入如下2个命令:
clang++ -o main main.cpp
./main

linux环境

  1. 方法同上。控制台运行命令可能稍有不同,自行查找。

程序实现原理

见博客银行家算法_lingpy

其它

程序设计时间较早,代码如有bug欢迎push!