两个具有不同优先级的任务正在等待相同的信号量,一旦信号量被释放,高优先级的任务被调度?或者它是随机的?,使用 SCHED_RR 调度程序策略。
答案 0 :(得分:1)
一般来说,我知道当信号量被释放时,哪个等待任务首先被唤醒的规则,所以这取决于调度程序的选择。在正常调度机制的情况下,任务的“优先级”可能仅与调度程序相关,而不是由于信号量导致的同步。
答案 1 :(得分:1)
如果您使用的是SCHED_RR
,则调度程序会运行具有最高优先级的任务,并首先运行此类任务。如果有SCHED_RR
的任务且状态为TASK_RUNNING
,则会运行。
在单处理器系统上,如果存在SCHED_RR
和TASK_RUNNING
的任务,则仅执行此任务。但是在多核系统上,可以在另一个处理器上安排具有较低优先级的任务。
在我看来,优先级较高且SCHED_RR
先安排的任务,但没有保证此任务首先获得信号量,因为此处理器可能会执行更重要的工作,例如处理中断。
同样,这是我唯一的看法,而且我对linux内核还是比较陌生的。如果有人更有经验来批准它会很棒。
编辑:
调度程序对信号量并不重要。无论优先级如何,它都会唤醒一项任务。
因此,如果您的任务首先尝试获取锁定(这很难而且不安全),您可以先获得锁定。或者您可以自己管理信号量队列。