pthread_cond_signal 死锁

发布于 2024-10-06 00:42:36 字数 521 浏览 5 评论 0原文

如果调用 pthread_cond_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

What could be the cause if a call to pthread_cond_signal deadlocks?

From what I understand (man page), it is implemented internally with a mutex, but what could cause this internal mutex lock operation to deadlock?

EDIT: I am debugging an application which seem to deadlock on some occasions. A few of the stacktraces look like this:


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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

原来是傀儡 2024-10-13 00:42:36

好吧,需要注意的一件事可能是手册页中的这一警告,这听起来特别适用:

条件函数不是
异步信号安全,不应该
从信号处理程序调用。在
特别的,召唤的
pthread_cond_signal
来自信号的 pthread_cond_broadcast
处理程序可能会导致调用死锁
线程。

除此之外,如果 pthread_cond_t 中的内部互斥锁已被超出某些其他变量范围的杂散写入覆盖,您也可能会看到这一点。

Well, one thing to look for might be this caveat from the man page, which sounds particularly applicable:

The condition functions are not
async-signal safe, and should not
be called from a signal handler. In
particular, calling
pthread_cond_signal or
pthread_cond_broadcast from a signal
handler may deadlock the calling
thread.

Apart from that, you could also see this if the internal mutex within the pthread_cond_t has been overwritten by a stray write beyond the bounds of some other variable.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文