进程
# j
p(x--) v(x++) wait(if(x<=0) block else {x--;}) signl(if(x>max) block else {x++;})
# 死锁产生的必要条件
- 互斥,只能有一个程序拥有使用权
- 不剥夺,其他进程在使用的时候无法抢夺
- 请求和保持,同时获取的使用权并且在申请不到使用权的时候释放已申请的使用权
- 循环等待,进程互相等待其他进程持有的使用权
# 什么情况下会死锁
- 系统资源竞争
- 进程推进顺序非法
- pv操作的问题
# 死锁的解决方案
# 预防死锁
破坏四个条件
- 互斥 spooling技术
- 不剥夺 获得不了的资源,把其他的资源也释放,(缺点,可能会发生饥饿)
系统干预使其放弃(CPU,缺点复杂)
- 请求和保持 一次性申请,可能饥饿,资源利用率低
- 循环等待 给资源排序,按照顺序申请.那么必然存在一个进程拿到了当时最关键的资源,则可以继续执行.
# 避免死锁
# 死锁的检测与解除
检测死锁
如果存在安全序列则没有死锁 如果没有安全序列,则死锁
解除死锁
挂起相关进程,归还资源
或者终止进程,归还资源
进程回退,资源分配关系变换
编辑 (opens new window)
上次更新: 2024/04/16, 00:35:21