当前位置:  开发笔记 > 编程语言 > 正文

信号量在RTOS中发布或发出信号时会发生什么?

如何解决《信号量在RTOS中发布或发出信号时会发生什么?》经验,为你挑选了1个好方法。

让6个任务,6个,4个(任务)等待信号量.当信号量发出信号时,RTOS做出了什么决定

    从等待(信号量)列表中选择哪些任务

    如果从等待列表中挑选了一个任务,剩下的任务会发生什么,即它们何时运行.

    当已经运行更高优先级的任务时.

所有RTOS的解决方案是否相同



1> kkrambo..:

如果这是基于优先级的抢占式多任务系统,则RTOS调度程序将运行准备运行的最高优先级任务.当发信号通知信号量时,RTOS调度程序重新评估最高优先级的准备运行任务是什么,如果它与先前运行的任务不同,它将执行到该任务的上下文切换.

当有多个任务等待相同的信号量并且信号量发出信号时,则:

    等待信号量的任务的最高优先级任务将准备好运行.

    剩下的任务将继续等待信号量.

    如果先前运行的任务的优先级高于准备运行的任务,则先前运行的任务将继续运行.即使等待任务已准备好运行,它也不会运行,直到它成为可以运行的最高优先级任务.

以上情况适用于所有基于优先级的抢占式多任务RTOS,它不一定都是RTOS.如果RTOS不支持优先级任务,那么它可能会将信号量授予等待信号量最长的任务.并且它还可能使用循环调度程序,使得每个任务在预定的时隙中运行,而不是允许任务异步地相互抢占.

跟进: 如果您使用信号量作为事件信号,并且有多个任务消耗该事件,那么您将不得不仔细考虑设计.我不相信这可以通过单个二进制信号量来完成.因为如果最高优先级的消费者任务获得信号量,做其业务,然后在再次发信号通知信号量之前再次等待信号量,那么最高优先级的消费者将始终在每次发信号时获得信号量.优先级较低的消费者任务永远不会运行,因为它们永远不会被授予信号量.

一种可能的解决方案是使用计数信号量.当事件发生时,信号量计数应设置为等于消耗任务的数量.然后每个消耗任务获取信号量并将计数减1.在信号量计数减少到零之前,消耗任务不应再等待信号量.这将阻止最高优先级的消费者每次事件多次获取信号量,因此它将允许每个消费者任务仅响应事件运行一次.

您可能希望探索发布 - 订阅设计模式,以查看是否有更好的方法来解决您的情况.

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有