Очереди сообщений UNIX поддерживают порядок сообщений?

StackOverflow https://stackoverflow.com/questions/3667001

  •  01-10-2019
  •  | 
  •  

Вопрос

Если под 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 - это неотрицательное целое число, которое определяет приоритет этого сообщения. Сообщения размещены на очередь в уменьшении порядка приоритета, с более новыми сообщениями того же приоритета, размещенного после старых сообщений с тем же приоритетом.

Так что да, у вас есть гарантия.

Другие советы

Вы получаете сообщение, которое является старейшим одним из самых высоких приоритетов. Поэтому, если вы отправите все с тем же приоритетом, вы всегда получаете их в том же порядке.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top