لماذا أحتاج إلى SEM_PRIORITY_Q عند استخدام كائن المزامنة الآمن لعكس VxWorks؟

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

  •  01-07-2019
  •  | 
  •  

سؤال

في VxWorks، أقوم بإنشاء كائن المزامنة (mutex) باستخدام خيار SEM_INVERSION_SAFE، للحماية من مشكلة انعكاس الأولوية.
يقول الدليل أنني يجب استخدم أيضًا خيار SEM_PRIORITY_Q.لماذا هذا؟

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

المحلول

عند إنشاء إشارة كائن المزامنة في VxWroks، لديك خياران للتعامل مع المهام المتعددة الموجودة في قائمة الانتظار (في انتظار) للإشارة:FIFO أو المهمة ذات الأولوية الأعلى أولاً.

عند استخدام خيار SEM_INVERSION_SAFE، سيتم رفع المهمة التي تحتوي على كائن المزامنة إلى نفس الأولوية مثل المهمة ذات الأولوية الأعلى التي تنتظر الإشارة.

إذا كنت ستستخدم قائمة انتظار FIFO للإشارة، فسيتعين على النواة اجتياز قائمة انتظار المهام في انتظار كائن المزامنة للعثور على المهمة ذات الأولوية العليا.هذه العملية ليست حتمية، حيث يتغير وقت اجتياز قائمة الانتظار مع تغير عدد المهام في قائمة الانتظار.

عند استخدام خيار SEM_PRIORITY_Q، يجب على النواة ببساطة أن تنظر إلى المهمة الموجودة في رأس قائمة الانتظار، لأنها تمثل الأولوية القصوى.هذه عملية زمنية ثابتة.

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