Pregunta

Si, bajo UNIX / Linux / BSD / OSX, utilizo esta secuencia de APIs en Aplicación 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);
    ...

y esta secuencia de eventos en la aplicación B:

    mqd_t open_res = mq_open(full_queue_name, O_RDONLY);
    ...
    mq_receive(...)
    mq_receive(...)

... ¿Tengo una garantía de que la cola de mensajes mantiene el orden de los mensajes? Es decir, que la aplicación B recibirá los datos de ptrData1 primero, y luego los datos de ptrData2?

¿Fue útil?

Solución

De man mq_send en Linux (énfasis añadido):

  

El argumento msg_prio es un entero no negativo que especifica la prioridad de este mensaje. Los mensajes se colocan en la cola en orden de prioridad decreciente, con los nuevos mensajes de la misma prioridad de ser colocado después de los mensajes más antiguos con la misma prioridad.

Así que sí, usted tiene una garantía.

Otros consejos

Se obtiene un mensaje que es más antigua de prioridad más alta. Así que si usted envía todos con igual prioridad, siempre se recibe en mismo orden.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top