从策略和实践,带你掌握死锁检测
💡
原文中文,约6600字,阅读约需16分钟。
📝
内容提要
介绍死锁产生原因和使用hook和图算法检测死锁的方法。使用hook需要定义与目标函数一样的类型,具体函数实现,函数名与目标函数名一致,以及调用dlsym()函数初始化hook。图算法可以通过检测有向图是否有环来判断是否有死锁。
🎯
关键要点
- 死锁是多个线程或进程因争夺资源而造成的僵局。
- 死锁的存在是由于资源获取环的存在,检测环即检测死锁。
- 使用hook检测死锁需要定义与目标函数相同的类型,并实现具体函数。
- dlsym()函数用于获取共享对象中符号的地址,返回值为符号地址或NULL。
- pthread_self()函数用于获取调用线程的ID,始终成功返回线程ID。
- 使用图算法检测死锁,通过检测有向图是否有环来判断。
- 图的构建包括矩阵和邻接表,新增节点和边以表示线程和锁的关系。
- 死锁检测的三个原语操作包括加锁前、加锁后和解锁后的操作。
➡️