2010-09-08 154 views
1

如果,下的UNIX/Linux/BSD/OSX,我使用的API的应用程序A序列:UNIX消息队列是否维护消息顺序?

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

man mq_send在Linux(强调):

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

所以是的,你有保证。

1

您会收到最高优先级的消息。所以如果你发送所有的优先级相同,你总是以相同的顺序接收它们。