هل تحافظ قوائم قوائم رسائل UNIX على ترتيب الرسائل؟

StackOverflow https://stackoverflow.com/questions/3667001

  •  01-10-2019
  •  | 
  •  

سؤال

إذا ، تحت UNIX/Linux/BSD/OSX ، أستخدم تسلسل واجهات برمجة التطبيقات في التطبيق أ:

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

وهذا تسلسل الأحداث في التطبيق ب:

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

... هل لدي ضمان بأن قائمة انتظار الرسائل تحافظ على ترتيب الرسائل؟ أي أن هذا التطبيق B سيتلقى البيانات من PTRDATA1 أولاً ، ثم البيانات من PTRDATA2؟

هل كانت مفيدة؟

المحلول

من man mq_send على Linux (تم التأكيد على):

الوسيطة msg_prio هي عدد صحيح غير سالب يحدد أولوية هذه الرسالة. يتم وضع الرسائل في قائمة الانتظار بترتيب الأولوية المتناقص ، مع وضع الرسائل الأحدث من نفس الأولوية التي يتم وضعها بعد الرسائل القديمة بنفس الأولوية.

لذا نعم ، لديك ضمان.

نصائح أخرى

يمكنك الحصول على رسالة أقدم واحدة من أعلى الأولوية. لذلك إذا أرسلت كل شيء بنفس الأولوية ، فستتلقى دائمًا بنفس الترتيب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top