【发布时间】:2012-04-13 09:49:25
【问题描述】:
有没有什么方法可以使写入进程在使用mq_send() 向消息队列发送消息后,多个读取进程可以使用mq_receive() 读取消息。我预计 1 次写入 mq 和 1 次读取 mq,消息丢失。
所以我只想知道我的理解是否错误。有什么办法可以让单个写入器和多个读取器进程可以使用 posix 消息队列进行通信。
【问题讨论】:
有没有什么方法可以使写入进程在使用mq_send() 向消息队列发送消息后,多个读取进程可以使用mq_receive() 读取消息。我预计 1 次写入 mq 和 1 次读取 mq,消息丢失。
所以我只想知道我的理解是否错误。有什么办法可以让单个写入器和多个读取器进程可以使用 posix 消息队列进行通信。
【问题讨论】:
是的,您的理解是正确的。您不能使用 POSIX 消息队列可靠地做到这一点。如果您想将相同的消息可靠地传递给不同的线程/进程,您应该为每个阅读器使用不同的队列。
如果您切换到 SYSV 消息队列,则可以执行此操作。 Msgsnd() 和 msgrcv() 可以在某些约定的协议中操作消息的消息类型字段。比如写进程会将消息的消息类型设为读进程的PID;并且阅读器进程将请求仅读取该消息类型的消息。请注意,这仍然需要编写器为每个读取器进程编写一条消息。
【讨论】: