最有效的避免死锁的算法就是银行家算法。
![](https://img-blog.csdnimg.cn/img_convert/271c1bb3f4cc9bfd52f5d224e64c0177.png)
系统处于不安全状态未必死锁,但是死锁时一定处于不安全状态。系统处于安全状态一定不会死锁。
![](https://img-blog.csdnimg.cn/img_convert/9f5e909817b2a21235000307a0a86e84.png)
进程 | 最大需求 Max | 已分配 Allocation | 最多还需要 Need |
0,0,4 | 0,0,3 | 0,0,1 | |
1,7,5 | 1,0,0 | 0,7,5 | |
2,3,5 | 1,3,5 | 1,0,0 | |
0,6,4 | 0,0,2 | 0,6,2 | |
0,6,5 | 0,0,1 | 0,6,4 |
(1)(1,4,0)
用(1,4,0)和每一个进程最多还需要的值进行比较,<(1,4,0)
所以资源剩余为(1,4,0)+(1,3,5)=(2,7,5)
用(2,7,5)进行比较,,
,
,
<(2,7,5)
所以当x,y,z取(1,4,0)时,系统处于安全状态
安全状态
(2)(0,6,2)
用(0,6,2)和每一个进程最多还需要的值进行比较,,
<(0,6,2)
所以资源剩余为(0,6,2)+(0,0,3)+(0,0,2)=(0,6,7)
用(0,6,7)进行比较,<(0,6,7)
所以资源剩余为(0,6,7)+(0,0,1)=(0,6,8)
用(0,6,8)进行比较,,
都>(0,6,8),资源分配不均匀,发生死锁
所以当x,y,z取(0,6,2)时,系统处于不安全状态
不安全状态
(3)(1,1,1)
用(1,1,1)和每一个进程最多还需要的值进行比较,,
<(1,1,1)
所以资源剩余为(1,1,1)+(0,0,3)+(1,3,5)=(2,4,9)
用(2,4,9)进行比较,,
,
都>(2,4,9),资源分配不均匀,发生死锁
所以当x,y,z取(1,1,1)时,系统处于不安全状态
不安全状态
(4)(0,4,7)
用(0,4,7)和每一个进程最多还需要的值进行比较,<(0,4,7)
所以资源剩余为(0,4,7)+(0,0,3)=(0,4,10)
用(0,4,10)进行比较,,
,
,
都>(0,4,10),资源分配不均匀,发生死锁
所以当x,y,z取(0,4,7)时,系统处于不安全状态
不安全状态
![](https://img-blog.csdnimg.cn/img_convert/b8326729ffc6dd4004671308a79c60e3.png)