2
我在我的一个c应用程序(它是一个大代码)中面临死锁,并且我能够调试打印互斥锁的阶段。它看起来像下面 -使用pthread互斥锁(linux)调试死锁
{__data =
{__lock = 2,
__count = 0,
__owner = 15805,
__nusers = 1,
__kind = 0,
__spins = 0,
__list = {__prev = 0x0, __next = 0x0}
},
__size = "\002\000\000\000\000\000\000\000½=\000\000\001", '\0' <repeats 26 times>,
__align = 2
}
现在我能明白,__owner是线程持有这个互斥体的线程ID,同一线程对这个互斥结束死锁。有没有人知道其他领域的意义,如_ 锁, _count,__自旋等可能有用的调试死锁?任何提示/技巧也会受到欢迎? (基于调试,我明白的线程试图锁定它已经拥有的互斥锁,结束在死锁,也是其他线程都为这个互斥锁)
也可以找出哪一行代码有这通过调试器(gdb)观察进程/线程锁定(当然,调试信息和代码在手),而不需要仔细的代码遍历代码?我已经通过了我的代码几次,但无法找到这个锁在从函数返回之前未释放的位置。
由于 书呆子