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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top