什么是死锁
在并发条件下, 两个或两个以上的进程在运行过程中因争夺资源而产生的一种僵局,若无外界作用,这组进程将无法推进
死锁产生的条件
产生死锁的四个必要条件
-
互斥条件
只有对必须互斥使用的资源的争抢才会导致死锁,哲学家的筷子,编程里的互斥锁
-
不剥夺条件
进程获得的互斥资源在未使用之前,不能由其他进程强行夺走,只能主动释放
-
请求和保持条件
进程已经保持了至少一个资源,但又提出了新的资源请求
-
循环等待条件
存在一个进程资源的循环等待链,链中的每一个进程已获得的资源同时被下一个进程所请求
(循环等待不一定产生死锁,死锁一定存在循环等待;当系统的每类资源只有一个,那么循环等待就必然导致死锁)
什么情况下会产生死锁
对不可剥夺资源的不合理分配,可能导致死锁
死锁的处理
预防死锁
- 破坏互斥条件
- 破坏不剥夺条件
- 破坏请求和保持条件
- 破坏循环等待条件
避免死锁
避免死锁的算法
银行家算法
在资源分配之前先判断这次分配是否导致系统进入不安全状态,以此决定是否允许资源分配请求,这就是银行家算法的核心。
死锁的检测和解除
资源分配图
资源分配图的简化
在资源分配图中,找出一个既不阻塞又非独立的进程节点P. 在顺利的情况下,p可获得所需资源而继续运行,直至运行完毕,再释放其所占有的全部资源,这相当于消去了P的请求和分配边,使之成为独立的节点。
进行一系列如上述的操作后,若能消去图中的所有边,使所有的进程结点成为独立结点,则称为可完全简化的
死锁定理
若某个时刻系统的资源分配图是不可完全简化的,那么此时系统死锁