信号“自动阻止”(当执行进入处理程序函数时)是否阻止另一个这样的信号传递到另一个线程?

时间:2018-07-19 20:23:00

标签: c linux multithreading signals

信号掩码是特定于线程的,这意味着阻塞信号不会阻止信号传递到未阻塞该信号的另一个线程。当执行进入处理程序函数(假设没有SA_NODEFER)时,“当前”信号将被阻塞。

这是否意味着它将在当前进程中的所有线程中被阻塞,还是有可能将下一个这样的信号传递到另一个线程中(当它仍在第一个线程中处理时)?

1 个答案:

答案 0 :(得分:2)

阅读man sigaction

  

sa_mask指定在执行信号处理程序期间应屏蔽(即添加到调用信号处理程序的线程的信号屏蔽 )的信号屏蔽。另外,除非使用SA_NODEFER标志,否则触发处理程序的信号将被阻止。

这听起来像是当前处理的信号的屏蔽仅影响处理线程,因此其他线程可能会处理其他信号。

我认为,多线程系统通常会阻塞除一个(或几个)专用信号处理线程(例如,在signalfd上轮询的一个)以外的所有线程的 all 个信号。这样,您不必担心信号降落在某些不可预测的线程上。

相关问题