目录
死锁问题的出现
本质就是尝试加锁的时候发现上次锁没有及时释放,导致加锁加不上
1.产生死锁的三个典型场景
1.一个线程一把锁(可重入锁)
线程A针对锁1连续加锁两次,如果不是可重入锁,就死锁了.
(因为后续要加的锁需要等待一开始加的锁的释放,但是锁释放需要后续加锁成功)
2.两个线程两把锁
线程A有锁a,线程B有锁b,此时A想要b的锁,B想要A的锁
3.N个线程M把锁(复杂问题)
哲学家就餐问题
在这种情况下死锁是个小概率性问题,但绝不能忽略
2.死锁的4个必要条件
1.互斥使用
2.不可抢占
3.请求和保持(获取锁后一直持有,直到释放)
4.循环等待(和我们编写代码密切相关)
循环等待的解决方法:
针对锁编号,约定在获取多把锁的时候,要明确获取锁的顺序是从小到大的顺序
如果获取不到就阻塞等待