从POSIX Message Queue接收特定消息

时间:2011-03-07 18:49:38

标签: unix posix message-queue mq

我应该在Unix中编写一个C应用程序,这样N子进程将从父进程分叉,我将向这些子进程发送消息,并且子进程应该相互发送消息。

但问题是,我需要将消息发送到特定的目标子进程。即,父母将发送给孩子1,孩子1将发送给孩子2,...并且孩子n将发送给1(循环)。

问题是,如果我只创建一个消息队列,任何n子节点都可能使消息出列(因为它们中的任何一个可能由于内核调度程序而在父进程之后运行)因此消息将以错误的方式出列过程!

在我的应用程序中,会有最大值。队列中一次有1条消息。我想到的唯一解决方案是创建n个不同的消息队列,并将消息传递到适当的队列,以便特定的目标进程可以接收它。但我认为必须有一个更合理的解决方案。

有什么想法吗?

Contraints:不允许进程之间的管道,我知道mq在这里效率低下。我也将实施它们,两者都是必需的。 P.S。这是有点儿作业(该死的我是http://canyoudomyhomework.com的创造者),但这不仅仅是一个家庭作业,一个具有挑战性的问题恕我直言。)

1 个答案:

答案 0 :(得分:1)

根据性能要求,代理(路由器)解决方案最合适。

父母可以充当路由器,或者可以产生特定的进程来完成这项工作。

定义一个简单的消息结构,其第一个元素作为预期目标,我们也可以将父进程指定为零。

每个进程在它自己和代理之间只有一个队列。所有消息都在一个地方处理和路由,从而避免了你提到的NxN扇出。

祝你好运