跳至主要內容

1、死锁相关

KindBrave大约 2 分钟

1.死锁的四个条件

  • 互斥:每个进程对于资源使用都是互斥不共享的
  • 不可剥夺:一个进程手中的资源,除非自己主动释放,其他进程不能剥夺
  • 请求和保持:一个进程当前获得的资源不满足执行条件,它会继续请求资源,但是当前拥有的资源它不会释放
  • 循环等待:存在这样一个队列,队列中的进程A需要进程B手中的资源,进程B又需要进程A手中的资源

只有这四个条件同时成立,才会发生死锁,所以,只要让其中一个条件不成立,就可以解除死锁

2.死锁预防

死锁预防感觉更像是悲观锁的方式,就是在运行之前就认为可能会发生死锁,所以采用一些方式预防。

上面我们说,只要死锁的四个条件有一个不满足,那么就不会有死锁了。我们可以考虑破坏死锁的四个条件之一。

2.1 破坏互斥

让资源不是互斥的访问,这对一些只读文件什么的还是可以的,但是对于大部分共享资源可能不是那么适用

2.2 破坏不可剥夺

如果一个进程在等待过程中,可以把它手中的资源全部剥夺走,给其他进程使用

2.3 破坏请求保持

一个进程在执行之前,可以获取所有资源,满足条件了再执行

2.4 破坏循环等待

这个可以给资源编号,进程请求的资源必须按照资源编号顺序来进行,一个进程只有申请到了小号资源才能申请大号资源

3.死锁避免

死锁避免更像是乐观锁的精神,它有一个安全状态和不安全状态,如果一个进程申请完资源变成了不安全状态,那么就拒绝分配。

所谓安全状态,就是指在当前分配的条件下,可以按照某种顺序,顺利的把所有进程都执行完。

银行家算法