多个任务在同一个信号量上等待

时间:2013-07-03 11:05:47

标签: linux linux-kernel scheduler rtos

两个具有不同优先级的任务正在等待相同的信号量,一旦信号量被释放,高优先级的任务被调度?或者它是随机的?,使用 SCHED_RR 调度程序策略。

2 个答案:

答案 0 :(得分:1)

一般来说,我知道当信号量被释放时,哪个等待任务首先被唤醒的规则,所以这取决于调度程序的选择。在正常调度机制的情况下,任务的“优先级”可能仅与调度程序相关,而不是由于信号量导致的同步。

答案 1 :(得分:1)

如果您使用的是SCHED_RR,则调度程序会运行具有最高优先级的任务,并首先运行此类任务。如果有SCHED_RR的任务且状态为TASK_RUNNING,则会运行。

在单处理器系统上,如果存在SCHED_RRTASK_RUNNING的任务,则仅执行此任务。但是在多核系统上,可以在另一个处理器上安排具有较低优先级的任务。

在我看来,优先级较高且SCHED_RR先安排的任务,但没有保证此任务首先获得信号量,因为此处理器可能会执行更重要的工作,例如处理中断。

同样,这是我唯一的看法,而且我对linux内核还是比较陌生的。如果有人更有经验来批准它会很棒。


编辑:

调度程序对信号量并不重要。无论优先级如何,它都会唤醒一项任务。

因此,如果您的任务首先尝试获取锁定(这很难而且不安全),您可以先获得锁定。或者您可以自己管理信号量队列。