Поддерживают ли очереди сообщений UNIX порядок сообщений? - PullRequest
2 голосов
/ 08 сентября 2010

Если в 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?

Ответы [ 2 ]

4 голосов
/ 08 сентября 2010

С man mq_send на Linux (выделение добавлено):

Аргумент msg_prio является неотрицательным целым числом, которое определяет приоритет этого сообщения. Сообщения помещаются в очередь в порядке убывания приоритета, , причем более новые сообщения с таким же приоритетом размещаются после более старых сообщений с таким же приоритетом.

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

2 голосов
/ 08 сентября 2010

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

...