簡體   English   中英

為什么我必須在等待特定信號之前設置 pthread_sigmask

[英]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之外的所有信號,但線程執行總是容易出現SIGSTOPSIGKILL.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM