在实时操作系统中使用消息队列让我感到很困惑.给出的代码似乎将消息队列用于骨骼:即使将变量传递给另一个类对象也是通过MQ完成的.我总是在IPC中使用MQ的概念.问题是:什么是正确使用消息队列?
在实时操作系统环境中,您经常遇到必须保证以固定时间表执行代码的问题.例如,你可以有一个被调用函数正是每10毫秒.不早,不迟.
为了保证这种硬时序约束,您必须编写在任何情况下都不能阻止时间关键代码的代码.
此处不能使用posix线程同步原语.您永远不能从时间关键代码中锁定互斥锁或aqurie信号量,因为不同的进程/线程可能已将其锁定.但是,通常允许您从时间关键代码中解除阻塞其他一些线程(例如,释放信号量是可以的).
在这样的环境中,消息队列是交换数据的不错选择,因为它们提供了一种干净的方式将数据从一个线程传递到另一个线程而不会阻塞.
使用队列来设置变量可能听起来有些过分,但这是非常好的软件设计.如果你这样做,你就有了一个明确定义的时间关键代码接口.
编写确定性代码也很有帮助,因为你永远不会遇到竞争条件问题.如果通过消息队列设置变量,则可以确保时间关键代码以与发送时相同的顺序查看消息.混合直接内存访问和消息时,您无法保证这一点.