2010-09-08 3 views
1

Si, sous UNIX/Linux/BSD/OSX, j'utilise cette séquence d'API dans l'application A:Les files d'attente de messages UNIX gèrent-elles l'ordre des messages?

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(...) 

... faire J'ai une garantie que la file d'attente de messages maintient l'ordre des messages? En d'autres termes, l'application B recevra d'abord les données de ptrData1, puis les données de ptrData2?

Répondre

2

De man mq_send sur linux (soulignement ajouté):

L'argument msg_prio est un entier non négatif qui spécifie la priorité de ce message. Les messages sont placés dans la file d'attente par ordre décroissant de priorité, avec les nouveaux messages de même priorité placés après les messages plus anciens ayant la même priorité.

Alors oui, vous avez une garantie.

1

Vous obtenez le message le plus ancien ayant la priorité la plus élevée. Donc, si vous envoyez tous avec la même priorité, vous les recevez toujours dans le même ordre.

Questions connexes