linux下多线程可能会遇到死锁问题,死锁问题一般是两个线程争抢某种资源导致的,比如线程1已经拥有A锁,它同时还想获取B锁,而此时线程2已经拥有B锁,同时去获取A锁,这样线程1和2就因为无法获得各自想要获取的锁而阻塞。
可以用gdb调试来查看死锁的线程及位置。
命令如下:
gdb
attach pid
thread applay all bt
然后查看所有线程的栈信息,找出其中符合死锁条件的两个线程,找出死锁具体位置。
有个问题,一般为了减小生成的目标文件的大小,都会使用strip命令来去除目标文件的一些符号表,调试符号表信息等,此时就看不到栈的具体信息。如果此时死锁环境还存在,可以将一个no strip的版本放到环境下,生成一个nm文件来查看线程阻塞位置。