UNIX消息队列是否维护消息的顺序?

时间:2010-09-08 11:01:24

标签: unix mqueue

如果在UNIX / Linux / BSD / OSX下,我在应用程序A中使用了这个API序列:

    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 个答案:

答案 0 :(得分:3)

来自linux上的man mq_send(强调添加):

  

msg_prio参数是一个非负整数,指定此消息的优先级。消息按优先级降序排列在队列中,在具有相同优先级的旧消息之后放置具有相同优先级的较新消息。

是的,你有保证。

答案 1 :(得分:1)

您获得的信息是最高优先级的消息。因此,如果您以相同的优先级发送所有内容,则始终以相同的顺序接收它们。