UNIXメッセージキューはメッセージの順序を維持していますか?

StackOverflow https://stackoverflow.com/questions/3667001

  •  01-10-2019
  •  | 
  •  

質問

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からデータを受信しますか?

役に立ちましたか?

解決

から man mq_send Linux(強調追加):

MSG_PRIO引数は、このメッセージの優先度を指定する非陰性整数です。メッセージは、優先順位の減少順にキューに配置されます。 同じ優先順位の後に同じ優先順位の新しいメッセージが配置されています。

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

他のヒント

最優先事項の最古のメッセージを受け取ります。したがって、すべてを同じ優先順位で送信する場合、常に同じ順序でそれらを受け取ります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top