银行家算法

数据结构:
可利用资源向量(Available):系统还可以分配的资源
最大需求矩阵(Max):进程的最大资源需要
分配矩阵(Allocation):进程已经获得的资源
需求矩阵(Need):进程还需要获得的资源
银行家算法
P1、P2、P3、P4是四个贷款人
A、B、C是每个贷款人所需要贷款的项目
比如P1需要A项目贷款3元、B项目贷款2元、C项目贷款2元,只有都贷款成功P1才算贷款成功,才能完成自己工程。

银行可贷的936,首先贷一部分钱出去,贷完之后,还剩下的钱就是011
把剩下的011贷款出去,银行家是很聪明的,希望把剩下的钱借给你能借给的贷款人,这样他早点做完项目,早点把钱还回来。
确保剩下的钱能够满足P1、P2、P3、P4其中一个还需要的钱,那应该贷款给谁?
只有P2还需要的钱是小于011的(001),那么贷款给他,贷款给他之后,还剩下的钱是010,这是P2拿到了钱满足了自己需要的613,于是做完自己的工程之后把钱还给银行,银行此时可用的变成了(010+613=623)

银行家算法
于是变成了
银行家算法
P2贷款完成,这个时候剩下的钱对于P1、P3、P4来说都可以贷款给他们中的任意一个,假如按照顺序来,先贷款给P1,贷款给P1后,银行可用的钱变成了(623-222=401),贷款完成P1把所有的前还回来,银行可用的前变成了(401+322=723)银行家算法
然后变成了
银行家算法
按照上面的规则贷款给P3
银行家算法
剩下P4,这个时候把银行可用的是934,给P4需要的部分,变成了(934-420=514),P4拿到钱做完工程全部还回来,银行最后可用的钱变成了(514+422=936),和原来借出去的钱一样了。银行家算法

而最后的P2->P1->P3->P4就叫做安全序列。

来自bilibili视频:https://www.bilibili.com/video/av57430740?from=search&seid=8281291293563365479