【发布时间】:2013-10-26 10:56:14
【问题描述】:
如果我有一个程序有 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 传递给进程时,它是否保证传递给未阻塞的线程?或者它是否可以,例如,尝试一些被阻塞线程的子集然后放弃?
【问题讨论】:
-
AFAIK 你没有这样的保证....
-
OTOH 我不知道这不能保证。毕竟,这是向特定线程传递信号的正确方法。
标签: linux multithreading pthreads signals