银行家算法(Banker’s Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行,这种算法的提出能保证银行在发送贷款的时候,不会发生不满足所有用户需要的情况。
Need = Max - Allocation
假设,此时一个线程发出了资源请求,Request(a,b,c) 及假设中资源一共有3个,而此线程此时请求各需要 a,b,c
(1) 设置两个工作向量WORK:=AVAILABLE;FINISH[i]=FALSE ;
(2) 从进程集合中找到一个满足下述条件的线程
a. FINISH[i]=FALSE
b. NEED<=WORK
如找到,执行(3);否则,执行(4)。
(3) 当线程获得资源,可顺利执行,直至完成,从而释放资源。
WORK:=WORK+ALLOCATION ;
FINISH[i]:=TRUE ;
GO TO (2)
(4) 如所有的线程FINISH[i]=TRUE,则表示安全;否则系统处于不安全状态。
简单的说,银行家算法是在线程提供自己需求总量基础上进行的,并根据需求总量Max - 占有量Allocation = 需求量Need。并试探性的分配资源,通过安全性检测判断是否可以形成一个安全序列,最终得到是否分配的结果。