2

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からデータを受け取りますか?

4

2 に答える 2

4

Linuxからman mq_send(強調が追加されました):

msg_prio引数は、このメッセージの優先度を指定する負でない整数です。メッセージは優先度の高い順にキューに配置され、同じ優先度の新しいメッセージは同じ優先度の古いメッセージの後に配置されます。

そうです、あなたには保証があります。

于 2010-09-08T11:15:00.280 に答える
2

最も優先度の高い最も古いメッセージが表示されます。したがって、すべてを同じ優先度で送信すると、常に同じ順序で受信されます。

于 2010-09-08T11:15:34.787 に答える