使用sigmask将信号传递到多线程程序

时间:2013-10-25 16:18:14

标签: linux multithreading pthreads signals

如果我有一个运行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
}

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

1 个答案:

答案 0 :(得分:1)

是的,保证过程导向的信号将被传送到其中一个未被阻塞的线程(如果有的话)。 POSIX Signal Generation and Delivery的相关引用:

  

为该过程生成的信号应仅传递给其中一个   进程中调用sigwait()的那些线程   功能选择该信号或​​没有阻止交付   信号。