如果在UNIX/Linux/BSD/OSX下,我在应用程序中使用此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接收数据?

有帮助吗?

解决方案

man mq_send 在Linux上(添加了重点):

MSG_PRIO参数是一个非负整数,指定此消息的优先级。消息以减少优先级的顺序放在队列上 在具有相同优先级的较旧消息之后放置相同优先级的较新消息。

是的,您有保证。

其他提示

您会收到最古老的消息之一。因此,如果您以相同的优先级发送全部,则始终以相同的顺序收到它们。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top