死锁的产生和处理

参考:

https://www.cnblogs.com/JimmyFanHome/p/9914562.html           AJimmyFang     

https://zhuanlan.zhihu.com/p/475267998

https://www.cnblogs.com/liujianfeng/p/9717889.html

死锁产生的原因

多线程互相等待对方释放自己需要的资源。

产生死锁的四个必要条件

互斥性:线程对资源的占有是排他的,一个资源同一时间只能被一个线程占有,直到释放

请求和保持:线程请求受阻时已经占有的资源不释放

不剥夺:一个线程在释放资源之前,其他的线程无法剥夺占用

循环等待:发生死锁,线程进入循环等待,永久阻塞

避免死锁的方法

加锁时限:线程尝试获取锁的时候设置超时时间,超时则放弃对该锁的请求并释放自己占有的锁

避免多次锁定:尽量避免同一个线程对多个Lock进行锁定

相同的加锁顺序:如果多个线程需要对多个Lock进行锁定,则应该保证以相同的顺序进行请求加锁

 

posted on 2023-05-18 16:10  or追梦者  阅读(6)  评论(0编辑  收藏  举报