0

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

4

2 回答 2

1

如果您正在使用,SCHED_RR那么调度程序会以最高优先级运行任务,并首先运行此类任务。如果有任务SCHED_RR并且它处于状态TASK_RUNNING,它将运行。

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

在我看来,优先级较高的任务SCHED_RR首先被调度,但不能保证这个任务首先获得信号量,因为这个处理器可能会做更重要的工作,比如处理中断。

同样,这是我唯一的意见,而且我对 linux 内核还很陌生。有经验丰富的人来批准它会很棒。


编辑:

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

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

于 2013-07-04T01:25:30.053 回答
1

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

于 2013-07-03T11:25:36.573 回答