一个系统v消息队列存在多个进程读/写问题

时间:2018-11-13 11:36:28

标签: c++ c linux message-queue

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

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

所以:

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

我的系统是Centos7。消息的大小为300个字节。

1 个答案:

答案 0 :(得分:0)

未提供代码。最好是检查失败的返回值并参考联机帮助页。在gdb上,您可以单步执行操作以指出子进程无法发送消息的地方