code di messaggi Do UNIX mantenere l'ordine dei messaggi?
Domanda
Se, sotto UNIX / Linux / BSD / OSX, io uso questa sequenza di API in Applicazione 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);
...
e questa sequenza di eventi in Application B:
mqd_t open_res = mq_open(full_queue_name, O_RDONLY);
...
mq_receive(...)
mq_receive(...)
... ho una garanzia che la coda di messaggi mantiene l'ordine dei messaggi? Cioè, che Application B riceverà i dati da ptrData1 prima, e poi i dati da ptrData2?
Soluzione
Da man mq_send
su linux (enfasi aggiunta):
L'argomento msg_prio è un numero intero non negativo che specifica la priorità di questo messaggio. I messaggi vengono inseriti nella coda in ordine di priorità decrescente, con i nuovi messaggi con la stessa priorità di essere immessi dopo i messaggi più vecchi con la stessa priorità.
Quindi sì, si dispone di una garanzia.
Altri suggerimenti
Si ottiene messaggio che è più antica di massima priorità. Quindi, se si invia il tutto con stessa priorità, che li ricevete sempre nel medesimo ordine.