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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top