死锁的产生和处理
参考:
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进行锁定,则应该保证以相同的顺序进行请求加锁
作者: deity-night
出处: https://www.cnblogs.com/deity-night/
关于作者:码农
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可邮件(***@163.com)咨询.