![](/img/trans.png)
[英]Why do I need to use Pthread_sigmask in multithreaded programs to assure that a signal is being handled by the set handler?
[英]Why if I have to set the pthread_sigmask before I wait to the specific signal
在其中一個線程中,我必須等待特定的實時信號,但我不明白為什么在等待特定信號之前必須先為線程設置整個 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);
通過查看代碼,似乎開發人員希望暫停線程的執行,直到SIGRTMIN+1
成為線程掛起( sigwaitinfo(2) )。 同時,他不希望線程執行受到其他信號的干擾(即線程不應對除SIGRTMIN+1
之外的任何信號做出反應),因此他使用以下語句屏蔽了其他信號:
//why do we need this?
pthread_sigmask(SIG_SETMASK, &signals, NULL);
這里要注意的一點是,盡管使用上述語句屏蔽了除SIGRTMIN+1
之外的所有信號,但線程執行總是容易出現SIGSTOP
和SIGKILL.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.