死锁
死锁
死锁产生条件
- 互斥条件
- 持有并等待条件
- 不可剥夺条件:当线程已经持有了资源 ,在自己使用完前不能被其他线程获取
- 环路等待条件:死锁发生时,两个线程获取资源的顺序构成了环形链
避免死锁问题的发生
使用资源有序分配法来破环环路等待条件
排查死锁工具
Linux 下可使用 pstack
+ gdb
来定位死锁问题。
pstack命令可以显示每个线程的栈跟踪信息(函数调用过程),只需 pstack <pid>
。定位死锁问题时可以多次执行 pstack 命令查看线程的函数调用过程,多次对比结果,确认哪几个线程一直没有变化,且是因为在等待锁,那么大概率是由于死锁问题导致的。