我已经花了几天时间在这个问题上 -
背景是,我正在尝试将一个单线程的C程序改为多线程。最近我发现了一种新的死锁情况,但是当我在gdb中查看互斥锁时,我发现
__lock=2 但 __owner=0
这不是递归互斥锁。有人见过这种情况吗?我正在处理的程序是一个守护进程,在高吞吐量运行20分钟(左右)后才会出现这种情况。如果你有任何想法,我将不胜感激。
编辑 - 我忘记提到此时我的其他所有线程都处于空闲状态。
谢谢
mutex.__data.__lock
值在尝试pthread_mutex_lock
调用之前被设置为一些荒谬的数字(大约40亿)。请尝试在执行锁操作之前设置断点或打印有关__lock
值的调试信息,我愿意打赌,在死锁发生之前,它是无效的。
__lock=2,__count=0,__owner=0,__nusers=0,__kind=2,__spins=0
- rutgersmike