1

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

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

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

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

有任何想法吗?

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

4

1 回答 1

1

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

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

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

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

祝你好运

于 2011-03-28T14:09:50.380 回答