UNIXメッセージキューはメッセージの順序を維持していますか?
質問
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引数は、このメッセージの優先度を指定する非陰性整数です。メッセージは、優先順位の減少順にキューに配置されます。 同じ優先順位の後に同じ優先順位の新しいメッセージが配置されています。
そう、あなたには保証があります。
他のヒント
最優先事項の最古のメッセージを受け取ります。したがって、すべてを同じ優先順位で送信する場合、常に同じ順序でそれらを受け取ります。
所属していません StackOverflow