Linux消息队列 - 多个接收器

时间:2013-02-22 01:53:24

标签: linux unix ipc message-queue

我最近一直在调查和使用linux消息队列,并且遇到了一些我不太明白为什么会发生的事情!

如果我们有两个正在运行的程序都在无限循环中使用msgrcv()来检查消息然后发送两条消息,则第一个程序运行将接收第一条消息,第二个程序接收第二条消息?如果你继续发送消息,那么在每个接收器之间交替。

显然,据我所知,一旦一个程序读取了该消息,它就会从队列中删除,但是如果它们都无限制地检查,是谁/如何决定谁将收到该消息呢?

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

简短的回答是内核决定。

答案很长,这是由the do_msgrcv() call within the Linux kernel处理的。如果没有可用消息,则调用者将被放入队列,直到消息可用。它并不能保证像你描述的那样来回传递,因为这完全取决于每个msgrcv()调用的时间,但在你的情况下,它几乎可能在所有时间都是这样。