Frage

Wenn unter UNIX / Linux / BSD / OSX, verwende ich diese Folge von APIs in Anwendung 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);
    ...

und diese Abfolge von Ereignissen in Anwendung B:

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

... habe ich eine Garantie, dass die Nachrichtenwarteschlange die Reihenfolge der Nachrichten unterhält? Das heißt, dass die Anwendung B zuerst die Daten von ptrData1 erhalten, und dann die Daten aus ptrData2?

War es hilfreich?

Lösung

Von man mq_send auf Linux (Hervorhebung hinzugefügt):

Das Argument msg_prio ist eine nicht negative ganze Zahl, die angibt, die Priorität der Nachricht. Die Nachrichten werden in der Warteschlange platziert in der Reihenfolge ihrer Priorität abnimmt, mit neueren Meldungen der gleichen Priorität nach älteren Nachrichten mit der gleichen Priorität gesetzt wird.

Also ja, haben Sie eine Garantie.

Andere Tipps

Sie Nachricht erhalten, die älteste von höchster Priorität ist. Also, wenn Sie alle mit gleicher Priorität senden, können Sie immer erhalten sie in derselben Reihenfolge.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top