死锁定义
多个进程在运行过程中因争夺资源而造成的一种僵局。当进程处于这种僵局状态,若无外力作用,他们将无法再向前推进。
例子:
进程A先锁a在获得锁b的顺序获得锁,进程B先锁b在获得锁a的顺序获得锁,当进程A和进程B同时推进时就造成了死锁。
死锁4个必要条件
- 互斥:进程对所分配的资源具有排他性控制,即在一段时间内某资源仅为一进程所占有。
- 请求保持:当进程因请求资源而阻塞时,对已获得的资源保持不放。
- 不可剥夺:进程已获得的资源在未使用完之前,不能被剥夺,只能使用完由自己释放。
- 环路等待:在发生死锁时,必然存在进程-资源的环形链。
预防死锁
- 资源一次性分配:一次性分配所有资源,这样就不会再有请求(破坏请求)
- 只要有一个资源分配不到,也不给这个进程再分配其他资源(破坏保持)
- 可剥夺资源:当某进程获得部分资源,但得不到其他资源,则释放已占有的资源(破坏不可剥夺)
- 资源有序分配:系统给每类资源赋予一个编号,每个进程按编号递增的顺序请求资源,释放则相反(破坏环路等待)
- 以确定的顺序获得锁
- 超时放弃
检测死锁
- 首先为每个进程和每个资源指定一个唯一的号码
- 然后建立资源分配表和进程等待表
解除死锁
- 剥夺资源:从其他进程剥夺足够数量的资源给死锁进程,以解除死锁状态
- 撤销进程:可以直接撤销死锁进程或撤销代价最小的进程,知道有足够资源可用,死锁状态消除为止。
参考
https://blog.csdn.net/hd12370/article/details/82814348