什么信号不应该被多线程阻塞

我有一个多线程程序。 我想在一个线程中处理所有有意义的信号。 这就是我在创建任何线程之前所做的:

sigset_t signal_set, old_set;

sigfillset(&signal_set);
// What signals should I leave unblocked here?
pthread_sigmask(SIG_SETMASK, &signal_set, &old_set);

std::thread( /* some args */ );

pthread_sigmask(SIG_SETMASK, &old_set, nullptr);

但是我的好意是建议让一些信号畅通无阻,因为当信号可以直接发送到特定的线程时有很多情况: SIGSEGVSIGPROF - 我相信,这与在交互式程序中保留无阻碍的SIGINT一样好。


我的建议对这两个信号( SIGSEGVSIGPROF )是否正确?

我应该根据一些常识解开其他什么信号?


异步信号(其中大部分包括kill命令/函数发送的任何信号以及控制终端(如SIGINT )生成的SIGINT )都可交付给进程中的任何信号畅通无阻的线程,因此无需将它们解除阻塞所有线程。 如果您使用的是专用信号处理线程,则希望它们在除信号处理线程外的所有线程中都被阻塞。

另一方面,由于该线程的动作,同步信号被传送到特定的线程。 它们包括SIGPIPESIGBUSSIGSEGVSIGFPE等。除了SIGPIPE ,除非程序中存在严重的错误,否则这些应用都不会发生,并且您可能想阻止SIGPIPE ,因此您可以获取EPIPE错误并处理这个条件适当。 所以大多数情况下,我会说,阻止他们全部并没有什么坏处。 如果你真的发现自己需要处理SIGSEGV等,你可能应该重新思考原因,但同时可以随意解锁它。

链接地址: http://www.djcxy.com/p/23473.html

上一篇: What signals shouldn't be blocked by thread in multi

下一篇: Undefined behaviour when using iostream read and signed char