pthread_cond_signal死锁

时间:2010-12-03 12:02:13

标签: linux pthreads deadlock

如果调用pthread_cond_signal死锁,可能是什么原因?

根据我的理解(man page),它是在内部用互斥锁实现的,但是什么可能导致这个内部互斥锁操作死锁?

编辑:我正在调试一个在某些情况下似乎陷入僵局的应用程序。一些堆栈跟踪看起来像这样:


Thread 1 (Thread 0xf6dff6c0 (LWP 32001)):
#0  0xffffe410 in __kernel_vsyscall ()
#1  0x00af15de in __lll_mutex_lock_wait () from /lib/tls/libpthread.so.0
#2  0x00aef3eb in pthread_cond_signal@@GLIBC_2.3.2 () from /lib/tls/libpthread.so.0
#3  0xf4cc8d83 in xxx

1 个答案:

答案 0 :(得分:2)

嗯,要查找的一件事可能是手册中的这个警告,这听起来特别适用:

  

条件函数不是   异步信号安全,不应该   从信号处理程序调用。在   特别是,打电话   pthread_cond_signal或   来自信号的pthread_cond_broadcast   处理程序可能使调用死锁   线程。

除此之外,如果pthread_cond_t内的内部互斥量被超出其他变量范围的杂散写入覆盖,您也可以看到这一点。