gpt4 book ai didi

c++ - 我是否过度设计了每线程信号阻塞?

转载 作者:可可西里 更新时间:2023-11-01 17:56:17 27 4
gpt4 key购买 nike

在我的应用程序中,我通常希望拦截 SIGINTSIGTERM 信号以便正常关闭。

为了防止工作线程“窃取”信号,我在每个入口点都这样做:

// Block signals in this thread
sigset_t signal_set;
sigaddset(&signal_set, SIGINT);
sigaddset(&signal_set, SIGTERM);
sigaddset(&signal_set, SIGHUP);
sigaddset(&signal_set, SIGPIPE);
pthread_sigmask(SIG_BLOCK, &signal_set, NULL);

如果我不这样做,当我执行 Ctrl+C 时,有时(未指定哪个线程将获得信号)我的处理程序在基本线程不会被调用——相反,信号只是从工作线程中终止进程。这显然不酷。

所以我有一个信号处理线程并在其他地方阻塞信号。

但是,我没有注意到其他人这样做,很容易忘记这样做,而且它也不是完全可移植的。我还缺少一些更简单的技巧吗?


引用资料:

最佳答案

我觉得这是一件非常合理的事情。

您可以在生成任何其他线程之前阻塞 main 中的信号。生成的线程将继承创建者线程信号掩码,您只能在信号处理线程中解除阻塞信号(只有当该线程也生成其他线程时才要小心)。

或者你可以让信号在任何地方都被阻塞,并通过 sigwait 和信号处理线程中的 friend 明确地处理它们。

关于c++ - 我是否过度设计了每线程信号阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13498309/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com