sigaddset()
和pthread_sigadd()
函数之间有什么区别?在以下代码中,如果未注释pthread_sigmask()
函数调用,则信号即将到来。
sigemptyset(&signal_set);
if( sigaddset(&signal_set,SIGUSR1) == -1){
printf"sigaddset() retuned error number %d\n",errno);
}
//pthread_sigmask ( SIG_BLOCK, &signal_set, NULL );
while(1){
if(sigwait(&signal_set, &sig_number) == 0){
printf("Got signal\n");
}
}
最佳答案
sigaddset()
和pthread_sigadd()
一起使用,但是做不同的事情。sigaddset()
:
http://man7.org/linux/man-pages/man3/sigsetops.3.html:
这些功能允许操作POSIX信号集。
sigaddset()
和sigdelset()
分别从集合中添加和删除信号。pthread_sigadd()
:
设置信号后,可以通过sigprocmask()
/ pthread_sigmask()
对其进行屏蔽。
http://man7.org/linux/man-pages/man2/sigprocmask.2.html,
http://man7.org/linux/man-pages/man3/pthread_sigmask.3.html:
sigprocmask()
[以及pthread_sigmask()
]用于获取和/或更改
调用线程。信号掩码是一组信号,其传递
目前已被呼叫者阻止(有关更多信息,请参见signal(7)
细节)。
关于您发布的代码,遇到的信号是预期的工作方式。
http://pubs.opengroup.org/onlinepubs/009695399/functions/sigwait.html:
set
定义的信号在调用sigwait()
时应已被阻止;否则,行为是不确定的。
因此,您必须始终先阻止信号,然后再等待它们。
关于linux - sigaddset与pthread_sigmask,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30193762/