Будет ли прервана задача, использующая kill для отправки сигнала? - PullRequest
0 голосов
/ 24 сентября 2008

У нас есть следующий код в VxWorks:


sig_hdr () { ... }
task_low_priority() {
    ...
    // Install signal handler for SIGUSR1
    signal(SIGUSR1, sig_hdr);
    ...
}
task_high_priority() {
    ...
    kill(pid, SIGUSR1); //pid is the ID of task_low_priority
    ...
} 

Задача с высоким приоритетом отправляет сигнал (с помощью kill) задаче с низким приоритетом. Будет ли приоритетная задача прервана, а задача с низким приоритетом будет выполнена сразу или сигнал будет отложен до запуска задачи с низким приоритетом?

1 Ответ

1 голос
/ 24 сентября 2008

Отправка сигнала не является операцией блокировки. Обработчик сигнала будет выполняться только в том случае, если задача, на которой он зарегистрирован, имеет процессор.

В этом конкретном случае обработка сигнала будет отложена до выполнения задачи с низким приоритетом.

Смысл в том, что обработка сигнала может быть отложена на неопределенное время, если задача с обработчиком не выполняется.

Это действительно для операций ядра. В процессах реального времени обработка сигналов немного отличается тем, что первая доступная задача 1008 * в RTP будет выполнять обработчик сигналов.

...