在抢先操作系统中,在同一任务中使用函数之间的互斥X或信号量是适当的



我正在使用RTO。主要程序仅在空闲任务以外运行两个任务。

仅在单独任务之间使用信号量或静音是很好的编码实践吗?或在同一任务上的函数之间?

单个线程中仅

lode 毫无目的 - 锁定尝试始终会成功,因为没有其他线程会锁定它。如果mutex锁定为嵌套 - 即在解锁之前锁定了一次以上,则它也没有其他效果,然后将静音的内部计数器增加。

也许有一个论点在于使用MUTEX保护代码中的资源,该代码可能会在多个线程中访问维护下的以后;但是直到那碰巧的是,除了消耗CPU周期以外,静音没有其他作用。


在这种情况下,信号量的行为更为复杂,但是信号量的目的是同步和在

任务之间进行信号,因此在单个线程中几乎无法实现的目的,无法实现较少的目的用简单的计数器或标志付出昂贵。

在这种情况下,信号量的良性不如哑光。如果尝试在给予它之前尝试将其采取,则批判性的信号量 block;因此,如果代码在空为空时,该任务将阻止(停止运行(。如果信号量具有超时,则行为将是相当复杂的条件延迟的行为,如果没有超时,则任务将停止而永远不会恢复,如果超时为零,则不会发生任何事情。

因此,在单个线程中,取决于信号量的状态和使用的超时,它将以A task-suspend task-delay no-operation 。使用信号量来实现这两个,也许是不必要的混淆,因为任何RTO都会具有API来直接实现任务暂停和延迟。

考虑一下您使用的是sutex或信号的方法。它的目的是什么?然后考虑是否在单个任务的上下文中是否有必要。

mutex通常用于保护资源免于通过异步使用资源的事物同时访问资源。在这里,"异步"是指使用资源的事物没有同步,并且可能尝试同时使用资源。现在,一个任务可以从两个不同的功能同时访问资源吗?不,因为一个任务一次只能执行一个函数。单个任务中的不同功能已经通过一次仅执行一个函数的任务同步。因此,我想说的是,当一个任务使用时,互斥品不会提供任何好处。

信号量还具有超出静音的应用程序,例如发出事件的信号。我想可能有一些应用程序使用信号量仅通过一个任务访问的信号量是有道理的。但是您尚未描述您的申请

我会说,它们主要用于任务间通信/同步/控制对资源的访问,因此在主要任务之间而不是在同一任务之间使用它们。<<<<<<<<<<<<<<

可能存在情况,但我目前无法真正想到任何情况。

我个人认为,最好的任务只有一点点悬挂点,无论是从队列中放置或收到某些东西,等待静音或信号量等。在某些情况下,这并不总是如此情况,但确实使调试变得容易得多。

最新更新