Почему, если мне нужно установить pthread_sigmask, прежде чем я жду определенного сигнала - PullRequest
1 голос
/ 13 апреля 2019

В одном из потоков мне приходится ждать определенного сигнала в реальном времени, но я не понимаю, почему сначала я должен установить всю сигма-маску для потока, прежде чем ждать конкретного сигнала.

    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);


1 Ответ

1 голос
/ 13 апреля 2019

При просмотре кода кажется, что разработчик хочет приостановить выполнение потока, пока SIGRTMIN+1 не станет ожидающим потока ( sigwaitinfo (2) ). В то же время он не хочет, чтобы выполнение потока мешало другим сигналам (т. Е. Поток не должен реагировать на какие-либо сигналы, кроме SIGRTMIN+1), поэтому он маскировал другие сигналы, используя следующую инструкцию:

//why do we need this?
    pthread_sigmask(SIG_SETMASK, &signals, NULL);

Здесь следует отметить, что, хотя все сигналы замаскированы, кроме SIGRTMIN+1 с использованием вышеприведенного оператора, выполнение потока всегда склонно к SIGSTOP и SIGKILL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...