0

我们在 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)。高优先级任务会被抢占,低优先级任务会立即执行,还是会延迟信号直到低优先级任务开始运行?

4

1 回答 1

1

发送信号不是阻塞操作。信号处理程序仅在其注册的任务具有处理器时才会执行。

在这种特殊情况下,信号处理将被推迟到低优先级任务执行。

这意味着如果带有处理程序的任务没有运行,信号处理可能会无限期地延迟。

这对内核操作有效。在实时进程中,信号处理有点不同,RTP 中的第一个可用任务将执行信号处理程序。

于 2008-09-24T19:14:46.907 回答