وmq_send الذري؟
-
10-07-2019 - |
سؤال
ويمكن لأي أحد أن يقول لي ماذا يحدث إذا يتلقى برنامج مولتيثريد إشارة SIGSTOP أثناء تنفيذ mq_send؟
المحلول
وصفحة الرجل لmq_send
تشير تنفيذه على رأس mq_timedsend
، وهو استدعاء النظام في لينكس. استدعاءات النظام هي ذرية عموما وذلك لأنها إما تنجح أو لم يفعلوا ذلك. إذا تمت مقاطعة مكالمة النظام عن طريق إشارة، فإن السلوك المعتاد هو أن يعود -1 ومجموعة errno
إلى EINTR
. يبدو mq_send
لديه هذا السلوك.
والأساس، ويجب أن تحقق لEINTR
، وإعادة المحاولة المكالمة إذا فشلت في هذا السبيل. هذا مهم بشكل خاص للمكالمات النظام التي قد منع مثل recv
أو select
، لأن لديهم فرصة أكبر من أن يقطعه.
لا تنتمي إلى StackOverflow