Очереди сообщений UNIX поддерживают порядок сообщений?
Вопрос
Если под Unix / Linux / BSD / OSX я использую эту последовательность API в приложении A:
msgq_id = mq_open( full_queue_name,
O_RDWR | O_CREAT,
S_IRWXU | S_IRWXG,
&msgq_attr);
mq_send(msgq_id, ptrData1, len1, 0);
mq_send(msgq_id, ptrData2, len2, 0);
...
И эта последовательность событий в приложении B:
mqd_t open_res = mq_open(full_queue_name, O_RDONLY);
...
mq_receive(...)
mq_receive(...)
... У меня есть гарантия, что очередь сообщений поддерживает порядок сообщений? То есть это приложение B получит данные из Ptrdata1 сначала, а затем данные из ptrdata2?
Решение
От man mq_send
на Linux (добавлено акцент):
Аргумент MSG_PRIO - это неотрицательное целое число, которое определяет приоритет этого сообщения. Сообщения размещены на очередь в уменьшении порядка приоритета, с более новыми сообщениями того же приоритета, размещенного после старых сообщений с тем же приоритетом.
Так что да, у вас есть гарантия.
Другие советы
Вы получаете сообщение, которое является старейшим одним из самых высоких приоритетов. Поэтому, если вы отправите все с тем же приоритетом, вы всегда получаете их в том же порядке.