【发布时间】:2010-12-03 12:02:13
【问题描述】:
如果对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
【问题讨论】:
-
这是一种假设,还是您实际看到这种情况发生?
-
我正在调查一个 Linux 应用程序中的实际死锁情况。
-
不要只显示该线程在做什么,而是所有线程都在做什么:
thread apply all backtrace。只使用一个线程不会导致死锁。 -
我同意你的观点,这个问题并不是关于死锁的原因,我更一般地问什么可能导致 pthread_cond_signal 阻塞。我现在无法访问调试器,但我相信另一个线程正在执行 pthread_cond_wait。