【问题标题】:Do UNIX message queues maintain order of messages?UNIX 消息队列是否维护消息的顺序?
【发布时间】:2011-04-09 16:21:53
【问题描述】:

如果在 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(...)

...我能保证消息队列保持消息的顺序吗? 也就是那个Application B会先从ptrData1接收数据,再从ptrData2接收数据?

【问题讨论】:

    标签: unix mqueue


    【解决方案1】:

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

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

    所以是的,你有保证。

    【讨论】:

      【解决方案2】:

      您会收到最旧且优先级最高的消息。因此,如果您以相同的优先级发送所有内容,您将始终以相同的顺序接收它们。

      【讨论】:

        猜你喜欢
        • 2011-02-20
        • 1970-01-01
        • 1970-01-01
        • 2012-09-14
        • 2011-07-15
        • 1970-01-01
        • 2011-06-14
        • 2019-04-21
        • 1970-01-01
        相关资源
        最近更新 更多