银行家算法(banker's algorithm)是一种资源分配算法,在操作系统理论中它是一个避免死锁的算法,是以银行借贷系统的分配策略为基础,保证资源高效可分配的运行。
银行系统中,常常会涉及贷款业务。在理想的状态下,每个客户在申请贷款时都需要注明需要申请资金的最大额,银行尽可能满足客户的需求。当借用期限到后,客户应当及时归还所有资金,这个过程很类似于银行发放信用卡,当银行发行总价值2000万元的信用卡时,并不意味着银行一定有2000万元现金分配到每张卡中。
例如,某银行有A、B、C、D四种货币,有四位客户分别需要借该四种货币,且数量不等,在某一时刻借款状态见下表:

根据上表,可以通过每位客户的需求总量,以及已经借款的量计算出每位客户当前时刻还分别缺少的A,B,C,D 四种货币量,见下表

在计算出剩余需求量之后,银行需要对资金进行安全状态审查,保证可以有效地继续满足客户的需求。安全审查的方式是比较所有客户的各自剩余需求量是否超过银行当前剩余资金的情况,如果银行的剩余资金无法满足任何一位客户的剩余需求,则银行的资金意味着进入不安全状态。如果能够满足某位客户的剩余需求,则假设将银行的剩余资金借给该客户,当该客户资金到位后即使用完毕,则归还全部借款,这些借款则成为银行的剩余资金,然后重新开始检查银行剩余资金是否满足其他客户,不断迭代上述过程,直到最后所有客户都能借到钱并且都顺利还钱,则银行是安全状态。
例如,上图中,客户乙的剩余需求量小于银行的剩余资金,因此银行可以将剩余资金借给客户乙。当客户乙资金使用完毕之后,客户乙的所有资金将全部归还银行。银行将利用该部分资金向客户甲、乙、丁继续借款。
银行家算法的核心点在于数据分配之后的数据安全检查,这是一个有效算法的重要思想之一。银行家算法实质是一种在操作系统中避免死锁的算法,这里的资金可以理解为系统操作资源,客户可以理解为申请资源的进程。