هل تحافظ قوائم قوائم رسائل UNIX على ترتيب الرسائل؟
سؤال
إذا ، تحت 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 هي عدد صحيح غير سالب يحدد أولوية هذه الرسالة. يتم وضع الرسائل في قائمة الانتظار بترتيب الأولوية المتناقص ، مع وضع الرسائل الأحدث من نفس الأولوية التي يتم وضعها بعد الرسائل القديمة بنفس الأولوية.
لذا نعم ، لديك ضمان.
نصائح أخرى
يمكنك الحصول على رسالة أقدم واحدة من أعلى الأولوية. لذلك إذا أرسلت كل شيء بنفس الأولوية ، فستتلقى دائمًا بنفس الترتيب.
لا تنتمي إلى StackOverflow