【问题标题】:Issue with one system v message queue for multiple process read/write用于多进程读/写的一个系统 v 消息队列问题
【发布时间】:2019-04-16 05:42:21
【问题描述】:

我正在开发一个通过多个子进程为多个客户端提供服务的服务器程序。我只使用一个 System V 消息队列在父进程和子进程之间进行通信。每个进程将等待 mtype 等于进程 ID 的消息。每个子进程只与父进程通信。在父进程中,我使用标志 IPC_NOWAIT 调用 msgrcv 以防止被阻止处理其他内容。有 2 个子进程,它可以按预期工作,但是当子进程数量增加时,会出现以下问题:

  • 如果我将 msgsnd 上的标志设置为 IPC_NOWAIT,则某些子进程无法向父进程发送消息并显示错误 EAGAIN。如果我添加机制以重新发送这种错误的消息,它仍然会失败并且父进程不会收到消息。
  • 如果我从 IPC_NOWAIT 取消设置 msgsnd 上的标志,一些子进程将在此调用 msgsnd 函数时被阻塞。父进程没有收到任何消息。

所以:

  • 如何解决此问题?
  • 如果没有,您能推荐一位建筑师来解决我的问题吗?

我的系统是 Centos 7。消息大小为 300 字节。

【问题讨论】:

    标签: c++ c linux message-queue


    【解决方案1】:

    没有给出代码。最好是检查失败的返回值并参考手册页。在 gdb 上,您可以单步执行以到达子进程无法发送消息的位置

    【讨论】:

    • 我不能使用gdb,因为它在有多个进程时会随机发生,所以我不知道将gdb切换到哪个子进程会被阻塞。代码是我公司的一部分,所以我不能分享。
    猜你喜欢
    • 2011-01-18
    • 2012-09-22
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 2011-04-04
    相关资源
    最近更新 更多