如果调用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
答案 0 :(得分:2)
嗯,要查找的一件事可能是手册中的这个警告,这听起来特别适用:
条件函数不是 异步信号安全,不应该 从信号处理程序调用。在 特别是,打电话
pthread_cond_signal
或 来自信号的pthread_cond_broadcast
处理程序可能使调用死锁 线程。
除此之外,如果pthread_cond_t
内的内部互斥量被超出其他变量范围的杂散写入覆盖,您也可以看到这一点。