我有一个 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/