Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux pthread_cond_信号死锁_Linux_Pthreads_Deadlock - Fatal编程技术网

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*函数。