سؤال

لا بد لي من إنشاء محاكاة معالج ثنائي النواة في C (إنها في الواقع محاكاة ذاكرة متعددة المستويات، ذاكرة التخزين المؤقت L1 / L2، استبدال كتلة، إلخ). الشيء هو، أواجه صعوبة في معرفة طريقة لمزامنة النوى (التي أزرعها مؤشرات ترابطها). أي أفكار كيف يمكنني القيام بعملية عالمية؟ يجب أن أتغير من خيوط العمليات الفرعية؟ شكرا مقدما

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

المحلول

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

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

أيضا، نظرا لأن إجراء المحاكاة هو كل شيء عن "الوقت الافتراضي" (نظرا لأنك لا تستطيع تشغيل الوقت الفعلي!)، فإن وجود بنية أساسية بناء على "ساعة ظاهرية" ملخصات المشكلة إلى المستوى المناسب.

نصائح أخرى

هل يمكن أن يكون لديك موضوع مؤشر الترابط يمكن لخيط الساعة إجراء مكالمات صراحة إلى كل مؤشر ترابط معالج لجعل خطوة معالجة واحدة. كل مؤشر ترابط معالج يحصل على مكالمة من مؤشر ترابط الساعة إلى doStep(); ؛ يجعل خطوة واحدة، ثم إرجاع التحكم مرة أخرى إلى مؤشر ترابط الساعة.

يمكنك أيضا تعيين الترتيب الذي يتم فيه استدعاء مؤشرات ترابط المعالج للخطوات بحيث تكون أكثر عرضة للإصابة بأخطاء في رمز العميل الخاص بك.

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