在一个线程中,我必须等待特定的实时信号,但是我不明白为什么为什么要在等待特定信号之前首先为线程设置整个sigmask。
sigset_t signals;
siginfo_t info;
sigfillset(&signals);
sigdelset(&signals, SIGRTMIN+1);
//why do we need this?
pthread_sigmask(SIG_SETMASK, &signals, NULL);
sigemptyset(&signals);
sigaddset(&signals, SIGRTMIN+1);
sigwaitinfo(&signals, &info);
printf("This is thread %d %d\n", pthread_self(), info.si_value.sival_int);
答案 0 :(得分:1)
通过寻找代码,开发人员似乎想暂停线程的执行,直到SIGRTMIN+1
成为线程(sigwaitinfo(2))的待决对象为止。同时,他不希望线程执行受到其他信号的干扰(即,线程不应该对SIGRTMIN+1
以外的任何信号做出反应),因此他使用以下语句屏蔽了其他信号:
//why do we need this?
pthread_sigmask(SIG_SETMASK, &signals, NULL);
这里要注意的一点是,即使使用上述语句屏蔽了SIGRTMIN+1
以外的所有信号,线程执行也总是容易发生SIGSTOP
和SIGKILL.