死锁的条件,怎么解除死锁,怎么观测死锁。
死锁的产生有四个必要条件:
- 互斥条件:一个资源一次只能被一个进程使用
- 请求与保持条件:一个进程因为请求资源而阻塞时,对已经获得的资源保持不放
- 不剥夺条件:进程已经获得的资源,在未使用完之前,不能被强行剥夺
- 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系
死锁的检测:
一个简单的死锁检测方法,准备两张表。
一张记录当前资源的分配,有线程和它占有的资源的对应。
另一张记录当前等待资源的线程,有等待的线程和它请求的资源的对应。
当能够检测到环路时,表示发生了死锁。
死锁的解除:
有两种方法,对应不同的操作。
第一种方法:进程终止,简单地终止一个或多个进程以打破循环等待。
撤销所有死锁线程
一次终止一个线程直到取消死循环为止
扫描二维码关注公众号,回复: 8994446 查看本文章
第二种方法:抢占资源,从一个或多个死锁进程中抢占一个或多个资源
- 选择一个牺牲品
- 回滚
- 饥饿(在代价因素中加上回滚次数,回滚的越多则越不可能被作为牺牲品)