c++ - 什么会导致 SIGUSR1 未被设置了信号处理程序的子线程捕获?

标签 c++ linux multithreading

我遇到了一些奇怪的事情,我想这可能是我不了解 Linux 中线程的复杂性。我使用 signal(SIGUSR1, &callback) 在我的子线程中注册了一个信号处理程序,并且在我的父线程中没有对信号进行特殊处理。每隔一段时间,我的子线程就会引发一个 SIGUSR1。但是,它在退出的主线程中导致未处理的信号错误。如何重现此行为?当我尝试使用测试程序进行重现时,只要在子线程中设置了信号处理程序,它总会被调用。

最佳答案

哦,混合信号和线程。这不是一个好主意。如果必须,将一个线程作为信号处理线程并使用 pthread_sigmask() 屏蔽所有其他线程。但是,如果您使用 SIGUSR1 作为线程间通信的一种形式,则有更好的方法(互斥锁和信号量)。

关于c++ - 什么会导致 SIGUSR1 未被设置了信号处理程序的子线程捕获?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43331242/

相关文章:

c++ - 读者/作者锁...没有读者锁?

python - Cython 包装一个使用另一个库的类

linux - 命令在终端而不是脚本中工作

c++ - 调试取决于所选调度程序的奇怪错误

java - 在多线程程序线程中执行一个类的静态方法是否安全?

ios - 如何在全局函数中使用 AppDelegate 快速在主线程上执行选择器?

Java同步函数工作而同步块(synchronized block)不工作

c++ - 3D vector 构造函数 C++

c++ - 可以使用函数局部类作为 find_if 的谓词吗?

c - 数据不存储在结构中