Do files d'attente de messages UNIX maintien de l'ordre des messages?
Question
Si, sous UNIX / Linux / BSD / OSX, j'utilise cette séquence d'API dans l'application A:
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);
...
et cette séquence d'événements dans l'application B:
mqd_t open_res = mq_open(full_queue_name, O_RDONLY);
...
mq_receive(...)
mq_receive(...)
... dois-je une garantie que la file d'attente de messages maintient l'ordre des messages? C'est que l'application B recevra les données de ptrData1 d'abord, puis les données de ptrData2?
La solution
De man mq_send
sur linux (soulignement ajouté):
L'argument msg_prio est un entier non négatif qui indique la priorité de ce message. Les messages sont placés sur la file d'attente dans l'ordre décroissant de priorité, avec les nouveaux messages de la même priorité étant placés après les anciens messages avec la même priorité.
Alors oui, vous avez une garantie.
Autres conseils
Vous obtenez un message qui est plus ancienne de la plus haute priorité. Donc, si vous envoyez tous avec la même priorité, vous les recevez toujours en ordre.