سؤال

أي أفكار إبداعية لتجنب حالات الجمود على العائد أو النوم مع تعدد المهام التعاونية/غير المدعومة دون القيام بخيط O/S.Sleep (10)؟ عادةً ما سيتم الاتصال بالمكالمة أو نداء النوم إلى المجدول لتشغيل مهام أخرى. ولكن هذا يمكن أن ينتج في وقت ما deadlocks.

بعض الخلفية:

هذا التطبيق لديه حاجة كبيرة للسرعة ، وحتى الآن ، فإنه سريع للغاية مقارنة بالأنظمة الأخرى في نفس الصناعة. واحدة من تقنيات السرعة هي الترابط التعاوني/غير المسبق بدلاً من تكلفة تبديل السياق من مؤشرات الترابط O/S.

تصميم المستوى العالي مدير الأولوية الذي ينادي بالمهام اعتمادًا على الأولوية ووقت المعالجة. تقوم كل مهمة "تكرار" للعمل وتعود لانتظار دورها مرة أخرى في قائمة انتظار الأولوية.

إن الشيء الصعب مع الخيوط غير المعززة هو ما يجب القيام به عندما تريد أن تتوقف مهمة معينة في منتصف العمل وانتظار بعض الأحداث الأخرى من مهمة مختلفة قبل المتابعة.

في هذه الحالة ، لدينا 3 مهام ، AB و C حيث A عبارة عن وحدة تحكم يجب أن تتم مزامنة نشاط B و C. أولاً ، يبدأ A على حد سواء B و C. ثم B. عندما يعطي C ، يرى أنهما غير نشطين ، يقرر أن الوقت قد حان للركض ولكن ليس وقت C حتى الآن. حسنًا ، تمسك B الآن في عائد يسمى C ، لذلك لا يمكن تشغيله أبدًا.

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

المحلول 2

حسنًا ، أدركت أن الحل المثالي لهذا سيكون إذا كانت لغة C# تدعم "الاستمرارية" الحقيقية لإلغاء المكدس والاستمرار في مكان الخروج لاحقًا.

في غياب أننا نجعل استبدالنا المؤقت الخاص بنا عن طريق السماح للمهام في هذا الموقف بتعيين علامة "متقطعة" إلى حقيقية وعودة-Thereby Roveling Stack.

ثم عندما يرغب المجدول في جدولة وقت المعالجة لتلك المهمة مرة أخرى ، فإنه سيشهد انقطاعًا وتخطي المعالجة التي تم إجراؤها بالفعل للقفز مباشرة إلى موقع المقاطعة باستخدام عبارة بسيطة.

بإخلاص ، واين

نصائح أخرى

أعتقد أنه من المحتمل أن تكون أنظف طريقة للتعامل مع هذا هو فصل العائد (مؤشر ترابط يقرر أنه تمت معالجته بما يكفي لفترة من الوقت) من الحجب (في انتظار حدث معين). هذا يجعل من السهل نسبيًا إعطاء الوقت للخيوط التي تم إنتاجها ، ولكنها تجنب حدوث طريق مسدود من محاولة تشغيل خيط محظور. بشكل عام ، تريد القيام برسم طوبولوجي على الخيط الذي يحظره على الخيط الآخر ، حتى تتمكن من إعطاء الوقت للموضوع (الخيط) الذي ينتظره الآخرون. هذا يجب أن يعطي DAG - أي دورة في الرسم البياني تشير إلى طريق مسدود.

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