随笔 - 72  文章 - 0  评论 - 0  阅读 - 5421

死锁的产生和处理

参考:

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   or追梦者  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示