1、死锁相关
大约 2 分钟
1.死锁的四个条件
- 互斥:每个进程对于资源使用都是互斥不共享的
- 不可剥夺:一个进程手中的资源,除非自己主动释放,其他进程不能剥夺
- 请求和保持:一个进程当前获得的资源不满足执行条件,它会继续请求资源,但是当前拥有的资源它不会释放
- 循环等待:存在这样一个队列,队列中的进程A需要进程B手中的资源,进程B又需要进程A手中的资源
只有这四个条件同时成立,才会发生死锁,所以,只要让其中一个条件不成立,就可以解除死锁
2.死锁预防
死锁预防感觉更像是悲观锁的方式,就是在运行之前就认为可能会发生死锁,所以采用一些方式预防。
上面我们说,只要死锁的四个条件有一个不满足,那么就不会有死锁了。我们可以考虑破坏死锁的四个条件之一。
2.1 破坏互斥
让资源不是互斥的访问,这对一些只读文件什么的还是可以的,但是对于大部分共享资源可能不是那么适用
2.2 破坏不可剥夺
如果一个进程在等待过程中,可以把它手中的资源全部剥夺走,给其他进程使用
2.3 破坏请求保持
一个进程在执行之前,可以获取所有资源,满足条件了再执行
2.4 破坏循环等待
这个可以给资源编号,进程请求的资源必须按照资源编号顺序来进行,一个进程只有申请到了小号资源才能申请大号资源
3.死锁避免
死锁避免更像是乐观锁的精神,它有一个安全状态和不安全状态,如果一个进程申请完资源变成了不安全状态,那么就拒绝分配。
所谓安全状态,就是指在当前分配的条件下,可以按照某种顺序,顺利的把所有进程都执行完。
银行家算法