Linux 等待同一信号量的多个任务

Linux 等待同一信号量的多个任务,linux,linux-kernel,scheduler,rtos,Linux,Linux Kernel,Scheduler,Rtos,两个优先级不同的任务正在等待同一个信号量,一旦信号量被释放,高优先级的任务会被调度吗?或者它的随机性?我使用的是调度程序策略。一般来说,我不知道在释放信号量时哪个等待任务首先被唤醒,所以这取决于调度程序的选择。任务的“优先级”可能仅与正常调度机制下的调度程序相关,而与信号量导致的同步无关。如果您使用的是SCHED_RR,则调度程序运行优先级最高的任务,并首先运行此类任务。如果存在具有SCHED_RR的任务,并且该任务处于运行状态task_,则它将运行 在单处理器系统上,如果存在SCHED_RR且

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

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

如果您使用的是
SCHED_RR
,则调度程序运行优先级最高的任务,并首先运行此类任务。如果存在具有
SCHED_RR
的任务,并且该任务处于运行状态
task_
,则它将运行

在单处理器系统上,如果存在
SCHED_RR
task_正在运行的任务
,则仅执行此任务。但在多核系统上,优先级较低的任务可以调度到另一个处理器上

在我看来,优先级更高且
SCHED_RR
优先调度的任务,但不必担心此任务首先获得信号量,因为此处理器可能会执行更重要的工作,例如处理中断

同样,这是我唯一的观点,我对linux内核还相当陌生。如果有更有经验的人来批准,那就太好了


编辑:

调度程序对于信号量并不重要。它只是唤醒一个任务,而不管它的优先级如何


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

什么样的信号量?它是如何释放的?它是一个二进制信号量。它是由第三个任务发布的。你在使用PREEMPT-RT补丁吗?不,我不确定。我使用的是安卓补丁内核(2.6.37),所以我不能假设我的高优先级任务会在信号量释放后首先运行。Linux内核调度器的行为是什么?它随机拾取一个正在等待的任务,或者它将拾取首先进入队列的任务?未定义。您可以尝试,但希望在以后的版本中体验更改。如果需要依赖于行为,请使用不同的技术,而不仅仅是信号量和优先级。