1

如果我有一个程序N正在运行线程,并且N-1它们使用 pthread_sigmask 阻止传递 SIGUSR1 信号:

int rc;
sigset_t signal_mask;
sigemptyset(&signal_mask);
sigaddset(&signal_mask, SIGUSR1);
rc = pthread_sigmask(SIG_BLOCK, &signal_mask, NULL);
if (rc != 0) {
  // handle error
}

当操作系统(Linux,最近的内核)将 SIGUSR1 传递给进程时,它是否保证传递给未阻塞的线程?或者它是否可以,例如,尝试一些被阻塞线程的子集然后放弃?

4

1 回答 1

1

是的,可以保证进程导向的信号将被传递到已解除阻塞的线程之一(如果有的话)。来自 POSIX Signal Generation and Delivery的相关报价:

为进程生成的信号应准确地传送到进程中的线程之一,该线程正在调用sigwait() 选择该信号的函数或没有阻止信号的传递。

于 2013-10-26T02:32:41.807 回答