在操作系统中,消息队列和邮箱之间有什么区别。
答案 0 :(得分:8)
我怀疑没有普遍接受的定义消息队列与邮箱的对应关系。每个RTOS可能使用不同的术语和实现细节,因此您必须单独查看每个RTOS。
一般来说,一些常见的差异包括:
答案 1 :(得分:3)
队列通常在计算中具有非常精确的含义,作为具有先进先出(FIFO)访问语义的容器数据结构。具体而言,在RTOS队列中,对队列的访问将是线程安全的并具有阻塞语义。
另一方面,邮箱没有普遍接受的特定语义,我看到这个术语用于指代非常不同的RTOS IPC机制。在某些情况下,实际上存在队列,但如果RTOS也支持IPC队列,则邮箱将具有某种不同的语义 - 通常与内存管理有关。在其他情况下,邮箱可以基本上是长度为1的队列 - 即它具有队列的阻塞和IPC能力,但没有缓冲。这种机制允许进程之间的同步通信。答案 2 :(得分:0)
邮箱是使用队列和信号量实现的。 如果使用邮箱 put() 方法阻止多个线程将数据推送到完整队列,则在空间可用时,只有一个线程可以看到可用空间并允许以原子周期将数据推送到队列中。在没有原子保证的情况下,另一个线程可以在另一个线程检查大小并推送数据的时间内将数据推送到队列中。 同理,如果有超过 1 个线程在等待获取数据到空 Queue ,也可以用原子方式实现。
但与队列相比,邮箱有额外的开销。