我最近一直在研究和研究 Linux 消息队列,并遇到了一些我不太明白为什么会发生的事情!
如果我们运行两个程序,它们都在无限 for 循环中使用 msgrcv() 来检查消息,然后发送两条消息,那么第一个运行的程序将收到第一条消息,第二个程序将收到第二条消息?如果您继续发送消息,那么它会在每个接收者之间交替发送。
显然,我知道,一旦一个程序读取了消息,它就会从队列中删除,但是如果它们都在无限检查,那么谁/如何决定谁将接收该消息?
任何帮助,将不胜感激!
简短的答案是内核决定。
长答案是,这是由the do_msgrcv()Linux内核内部调用 http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=ipc/msg.c#l812。如果没有可用消息,则调用者将被放入队列中,直到有可用消息为止。它不能保证像您所描述的那样来回,因为这完全取决于每个的时间msgrcv()
调用,但就您而言,它可能几乎一直都是这样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)