线程死锁

时间:2020-07-09 22:07:27   收藏:0   阅读:72

线程死锁

1.死锁

技术图片

2.产生的四个必要条件

1. 互斥条件

? 进程要求对所分配的资源进行排他性控制,即该资源只能被一个进程占用,其他请求的进程只能等待占用资源的进程结束,释放资源

2.不可剥夺条件

? 进程已经获取了一个资源,在它使用完毕之前,无法被其他进程剥夺走,只能由获取该资源的进程主动释放资源

3.请求与保持条件

? 进程当前已经获取了一个资源,但又提出了一个新的资源请求,而新的资源被占用了,此时请求被阻塞, 当前获取的的资源也无法释放

4.循环等待条件

? 多个进程呈环形互相等待的情况称为循环等待,出现死锁的时候一定是循环等待的情况,但是循环等待不一定就是死锁,但这个闭环中的某个进程请求的资源不仅仅只有一个请求途径,环形外有进程也释放它请求的资源,则可以跑出闭环,则不是死锁

3.死锁演示

以下实现一个死锁:

技术图片

4.处理死锁

1.预防

2.避免

死锁的预防是严格控制产生死锁的必要条件的存在,而避免是不严格控制,因为就算满足了必要条件也不一定会发生死锁,如果这样限制的话,系统的性能将会降低,因此通过一些更优的算法,来避免产生死锁,就算条件满足也不会发生死锁。

1. 有序资源分配法

技术图片

2.银行家算法

银行家算法结构的逻辑如下:
技术图片

分析:

3.顺序加锁

4.限时加锁

3.检测

? 预防和避免死锁系统开销大且不能充分利用资源,更好的方法是不采取任何限制性措施,而是提供检测和解脱死锁的手段,这就是死锁的检测和恢复

死锁检测的数据结构

死锁检测步骤

技术图片

4.恢复

抢占

回滚

杀死进程(不推荐)

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!