从POSIX Message Queue接收特定消息

问题描述:

我应该在Unix上编写一个C应用程序,这样N子进程将从父进程中分离出来,我将发送消息给这些子进程,并且子进程应该相互发送消息。从POSIX Message Queue接收特定消息

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

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

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

任何想法?

Contraints:进程之间的管道是不允许的,我知道mq在这里效率很低。我也会执行它们,都是必需的。 P.S.这是有点功课(该死,我的http://canyoudomyhomework.com的创造者),但是这不只是一门功课,一个具有挑战性的问题,恕我直言。)

+0

我也不确定'mq_notify'是解决方案。 – 2011-03-07 20:55:25

+0

你觉得使用多个消息队列是非法的吗? – pilcrow 2011-03-07 22:08:09

+0

如果他们需要'N = 100'或更多呢?似乎效率低下,但它是目前唯一的解决方案。 – 2011-03-08 17:24:07

根据不同的性能要求,通知代理(路由器)的解决方案感到最为合适。

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

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

每个进程在其本身和代理之间只有一个队列。所有消息都在一个地方进行处理和路由,从而避免您提到的NxN扇出。

好运