我应该在Unix中编写一个C应用程序,这样N
子进程将从父进程分叉,我将向这些子进程发送消息,并且子进程应该相互发送消息。
但问题是,我需要将消息发送到特定的目标子进程。即,父母将发送给孩子1,孩子1将发送给孩子2,...并且孩子n
将发送给1
(循环)。
问题是,如果我只创建一个消息队列,任何n
子节点都可能使消息出列(因为它们中的任何一个可能由于内核调度程序而在父进程之后运行)因此消息将以错误的方式出列过程!
在我的应用程序中,会有最大值。队列中一次有1条消息。我想到的唯一解决方案是创建n
个不同的消息队列,并将消息传递到适当的队列,以便特定的目标进程可以接收它。但我认为必须有一个更合理的解决方案。
有什么想法吗?
Contraints:不允许进程之间的管道,我知道mq在这里效率低下。我也将实施它们,两者都是必需的。 P.S。这是有点儿作业(该死的我是http://canyoudomyhomework.com的创造者),但这不仅仅是一个家庭作业,一个具有挑战性的问题恕我直言。)
答案 0 :(得分:1)
根据性能要求,代理(路由器)解决方案最合适。
父母可以充当路由器,或者可以产生特定的进程来完成这项工作。
定义一个简单的消息结构,其第一个元素作为预期目标,我们也可以将父进程指定为零。
每个进程在它自己和代理之间只有一个队列。所有消息都在一个地方处理和路由,从而避免了你提到的NxN扇出。
祝你好运