Процессы с одним и несколькими получателями, использующие очередь сообщений posix в linux - PullRequest
8 голосов
/ 29 марта 2012

Есть ли способ, при котором процесс записи после отправки сообщения в очередь сообщений с использованием mq_send(), несколько процессов чтения могут прочитать сообщение с использованием mq_receive(). Я ожидаю 1 запись в mq и 1 чтение из mq, сообщение потеряно.

Так что я просто хочу знать, неверно ли мое понимание. Есть ли способ, чтобы один писатель и несколько читателей могли общаться, используя очереди сообщений posix.

1 Ответ

9 голосов
/ 29 марта 2012

Да, ваше понимание верно.Вы не можете сделать это надежно с очередями сообщений POSIX.Если вы хотите надежно передать одно и то же сообщение разным потокам / процессам, вы должны использовать разные очереди для каждого считывателя.

Это можно сделать, переключившись на очереди сообщений SYSV. Msgsnd () и msgrcv () могут манипулировать полем типа сообщения в некотором согласованном протоколе.Например, процесс записи сделает тип сообщения сообщения PID процесса чтения;и процесс чтения запросит чтение сообщений только этого типа.Обратите внимание, что это по-прежнему требует от автора записи сообщения для каждого процесса чтения.

...