如果对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发布于 2010-12-04 12:05:47
好吧,需要注意的一件事可能是手册页中的这条警告,它听起来特别适用:
条件函数不是异步信号安全的,不应从信号处理程序调用。特别是,从信号处理程序调用
pthread_cond_signal或pthread_cond_broadcast可能会使调用线程死锁。
除此之外,如果pthread_cond_t中的内部互斥锁被超出其他变量界限的零散写入所覆盖,您也可以看到这一点。
https://stackoverflow.com/questions/4345315
复制相似问题