使用mq_send()
将消息发送到消息队列之后是否存在编写器处理的任何方式,多个读取器进程可以使用mq_receive()
读取消息。我希望1写入mq
,1写入mq
,消息就会丢失。
所以我只想知道我的理解是否错误。有没有办法使单个编写器和多个读取器进程可以使用posix消息队列进行通信。
答案 0 :(得分:9)
是的,你的理解是正确的。使用POSIX消息队列无法可靠地执行此操作。如果要将相同的消息可靠地传递给不同的线程/进程,则应为每个读取器使用不同的队列。
如果切换到SYSV消息队列,则可以执行此操作。 Msgsnd()和msgrcv()可以在一些商定的协议中操纵消息的消息类型字段。例如,编写器进程将使消息的消息类型成为读取器进程的PID;并且阅读器进程将请求只读取该消息类型的消息。请注意,这仍然需要编写器为每个读取器进程编写消息。