死锁是多线程和并发编程不可规避的话题之一。
如何避免死锁,其实是考察我们对死锁的了解,包括什么是死锁、产生死锁的条件,当了解前面的两个问题,这个问题也就迎刃而解了!
首先需要将死锁发生的是个必要条件讲出来:
- 互斥条件: 同一时间只能有一个线程获取资源。
- 不可剥夺条件:一个线程已经占有的资源,在释放之前不会被其它线程抢占
- 请求和保持条件:线程等待过程中不会释放已占有的资源
- 循环等待条件: 多个线程互相等待对方释放资源
死锁预防,那么就是需要破坏这四个必要条件:
- 由于资源互斥是资源使用的固有特性,无法改变,这个就不做讨论
- 破坏不可剥夺条件:一个进程不能获得所需要的全部资源时便处于等待状态,等待期间他占有的资源将被隐式的释放重新加入到系统的资源列表中,可以被其他的进程使用,而等待的进程只有重新获得自己原有的资源以及新申请的资源才可以重新启动,执行
- 破坏请求与保持条件:第一种方法静态分配即每个进程在开始执行时就申请他所需要的全部资源,第二种是动态分配即每个进程在申请所需要的资源时他本身不占用系统资源
- 破坏循环等待条件:采用资源有序分配其基本思想是将系统中的所有资源顺序编号,将紧缺的,稀少的采用较大的编号,在申请资源时必须按照编号的顺序进行,一个进程只有获得较小编号的进程才能申请较大编号的进程。
在回答这个问题,建议读者稍微全面的回答,不要就事论事,尽量涵盖前因后果,会有意想不到的效果哦!
--------------------------------------------------------------------------------------
作者:超级字节码
来源:CSDN
原文:https://blog.csdn.net/dgxin_605/article/details/114629336
版权声明:本文为博主原创文章,转载请附上博文链接!
--------------------------------------------------------------------------------------