使用kill发送信号的任务是否会被抢占?
时间:2020-03-06 14:40:59 来源:igfitidea点击:
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 ... }
高优先级任务(通过杀死)向低优先级任务发送信号。
高优先级任务会被抢占而低优先级任务会立即执行,还是将信号推迟到低优先级任务开始运行?
解决方案
发送信号不是阻塞操作。信号处理程序仅在其注册的任务具有处理器时才执行。
在这种特定情况下,信号处理将推迟到低优先级任务执行之前。
这意味着如果处理程序的任务不运行,信号处理可能会无限期地延迟。
这对内核操作有效。在实时过程中,信号处理有点不同,因为RTP中的第一个可用任务将执行信号处理程序。