死锁的产生和处理

deity-night / 2023-05-18 / 原文

参考:

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

死锁产生的原因

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

产生死锁的四个必要条件

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

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

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

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

避免死锁的方法

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

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

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