c++ - 执行 std::thread::join() 时发出 SIGINT

标签 c++ linux multithreading pthreads

我有一个 main(),它生成一个线程,然后连接到它。 我希望能够对程序进行 CTRL-C,因此我将在 main 中安装 SIGINT 处理程序(生成线程将忽略此信号)。当我在 sig-handler 中时,我将使用 cancel() 取消生成的线程,但是当前在信号调用期间处于事件状态的“join()”会发生什么情况。 我的猜测是我会得到 EAGAIN 或 EINTR,并且我必须在循环中进行 join() 。我对吗?谢谢。

问题是:这对于多线程来说合法吗?我不介意只使用 SIGINT 句柄设置一个标志,但是 join() 调用会发生什么情况?

最佳答案

信号和线程?这里有龙!你必须fully-specify the masks ,否则 any thread may receive the signal .

信号处理程序通常不应假设它在“主”线程中运行。相反,它应该发布一条消息并返回 analagously to thread interruption 。主线程可以稍后在事件循环或其他任何地方获取它,然后加入。

关于c++ - 执行 std::thread::join() 时发出 SIGINT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9094523/

相关文章:

C++ 在 VS 2010 中调试访问冲突

java - 从 CentOS 7 终端调用 java 程序

linux - 如何将一个 docker 卷上的文件解压缩到另一个?

c++ - 套接字发送(..)线程的最佳数量

c++ - 即时翻译 Qt QML 应用程序

c++ - SQLite3 - 内存使用量逐渐增加,直到耗尽所有可用内存

c++ - 如何有效运行后台数据处理和记录(Debian、Beaglebone Black)

linux - xdotool、ctrl 键和键盘布局

multithreading - 如何为ServiceStack RabbitMQ使用者创建多个线程?

java - 单线程与多线程 JMS 生产者