Linux pthread_cond_信号死锁
如果调用Linux pthread_cond_信号死锁,linux,pthreads,deadlock,Linux,Pthreads,Deadlock,如果调用pthread\u cond\u signal死锁,可能是什么原因 据我所知(),它是用互斥锁在内部实现的,但是什么会导致这个内部互斥锁操作死锁呢 编辑:我正在调试一个在某些情况下似乎会死锁的应用程序。一些堆栈跟踪如下所示: Thread 1 (Thread 0xf6dff6c0 (LWP 32001)): #0 0xffffe410 in __kernel_vsyscall () #1 0x00af15de in __lll_mutex_lock_wait () from /li
pthread\u cond\u signal
死锁,可能是什么原因
据我所知(),它是用互斥锁在内部实现的,但是什么会导致这个内部互斥锁操作死锁呢
编辑:我正在调试一个在某些情况下似乎会死锁的应用程序。一些堆栈跟踪如下所示:
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
嗯,需要注意的一点可能是手册页中的警告,这听起来特别适用: 条件函数不可用 异步信号安全,不应 可以从信号处理程序调用。在里面 特别的,电话
pthread\u cond\u信号
或
pthread\u cond\u广播信号
处理程序可能会使调用死锁
线
除此之外,如果pthread\u cond\u t
中的内部互斥体被超出其他变量边界的错误写入所覆盖,您也可以看到这一点。那么,需要查找的一件事可能是手册页中的警告,这听起来特别适用:
条件函数不可用
异步信号安全,不应
可以从信号处理程序调用。在里面
特别的,电话
pthread\u cond\u信号
或
pthread\u cond\u广播信号
处理程序可能会使调用死锁
线
除此之外,如果pthread\u cond\t
中的内部互斥被超出其他变量边界的错误写入所覆盖,您也可以看到这一点。这是一种假设吗,或者你真的看到了这种情况吗?我正在调查Linux应用程序中的实际死锁情况。不要只显示该线程正在做什么,而是显示所有线程正在做什么:thread apply all backtrace
。仅使用一个线程不会导致死锁。我同意你的观点,这个问题实际上并不是死锁的原因,我想问的是什么会导致pthread_cond_信号阻塞。我现在无法访问调试器,但我相信另一个线程正在执行pthread_cond_wait。这是一个假设,还是您实际看到了这种情况?我正在调查Linux应用程序中的实际死锁情况。不要只显示该线程在做什么,但是所有线程都在做什么:threadapply all backtrace
。仅使用一个线程不会导致死锁。我同意你的观点,这个问题实际上并不是死锁的原因,我想问的是什么会导致pthread_cond_信号阻塞。我现在无法访问调试器,但我相信另一个线程正在执行pthread_cond_wait。谢谢,是的,我开始怀疑内存已损坏。我将检查信号处理程序是否使用了pthread*函数。谢谢,是的,我开始怀疑内存已损坏。我将检查信号处理程序是否使用了pthread*函数。