【问题标题】:Receiving a specific message from POSIX Message Queue从 POSIX 消息队列接收特定消息
【发布时间】:2011-07-10 13:47:56
【问题描述】:

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

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

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

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

有什么想法吗?

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

【问题讨论】:

  • 我也不确定mq_notify 是否是解决方案。
  • 您认为使用多个消息队列有什么不合理之处?
  • 如果他们需要N=100 或更多怎么办?似乎效率低下,但这是目前唯一的解决方案。

标签: unix posix message-queue mq


【解决方案1】:

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

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

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

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

祝你好运

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 2019-03-17
    • 2012-11-16
    • 2020-04-18
    • 1970-01-01
    • 2011-06-25
    • 2010-09-19
    相关资源
    最近更新 更多