让6个任务,6个,4个(任务)等待信号量。当信号量发出信号时, RTOS
- 从等待(信号量)列表中选择哪些任务
- 如果从等待名单中挑选了一项任务,那剩下的任务将会发生什么,即他们什么时候开始运行。
- 当已经执行了更高优先级的任务时。
醇>
所有 RTOS
的解决方案是否相同答案 0 :(得分:5)
如果这是一个基于优先级的抢占式多任务系统,那么RTOS调度程序将运行准备运行的最高优先级任务。当发信号通知信号量时,RTOS调度程序会重新评估最高优先级的准备运行任务,如果它与先前运行的任务不同,它将执行到该任务的上下文切换。
当有多个任务等待同一个信号量并且信号量发出信号时:
以上所有基于优先级的抢占式多任务RTOS都是如此,它不一定都是RTOS。如果RTOS不支持优先级任务,那么它可能会将信号量授予等待信号量最长的任务。它也可能使用循环调度程序,使每个任务在预定的时间段内运行,而不是允许任务以异步方式互相抢占。
<强>随访:强> 如果您使用信号量作为事件信号,并且有多个任务消耗该事件,那么您将不得不仔细考虑设计。我不相信这可以用一个二进制信号量来完成。因为如果最高优先级的消费者任务获得信号量,做其业务,然后在再次发信号通知信号量之前再次等待信号量,那么最高优先级的消费者将始终在每次信号通知时获得信号量。优先级较低的消费者任务永远不会运行,因为他们永远不会被授予信号量。
一种可能的解决方案是使用计数信号量。当事件发生时,信号量计数应设置为等于消耗任务的数量。然后每个消耗任务获取信号量并将计数减1。在信号量计数减少到零之前,消耗任务不应再等待信号量。这将阻止最高优先级的消费者每次事件多次获取信号量,因此它将允许每个消费者任务在响应事件时只运行一次。
您可能希望探索发布 - 订阅设计模式,以了解是否有更好的方法可以解决您的情况。