"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > هل لا تزال "المتقلبة" ذات صلة بمؤشرات الترابط المتعددة لـ C++ 11؟

هل لا تزال "المتقلبة" ذات صلة بمؤشرات الترابط المتعددة لـ C++ 11؟

تم النشر بتاريخ 2024-11-16
تصفح:228

Is `volatile` Still Relevant in C  11 Multithreading?

المتغيرات المتطايرة في لغة C 11

يثير إدخال نموذج آلة متعددة الخيوط في معيار C 11 تساؤلات حول سلوك المتغيرات المتطايرة المتغيرات، والتي تم استخدامها تقليديًا لمنع التحسين الذي قد يؤدي إلى سلوك غير محدد في البيئات المتزامنة.

في لغة C 98/03، كان عدم التعرف على الخيوط المتعددة في نموذج الذاكرة يعني أن المترجم يمكنه تحسين قراءة المتغير المتطاير، مما يؤدي إلى المثال السيئ السمعة للحلقة التي لا نهاية لها في انتظار متغير لتغيير قيمته.

ومع ذلك، فإن نموذج الذاكرة C 11 يعترف بإمكانية الوصول المتزامن إلى المتغيرات. هل هذا يعني أنه تم إهمال المتقلبة الآن؟

تحسينات المترجم والسلوك غير المحدد

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

volatile int x;

void func() {
x = 0;
while (x = = 0) {}
}

لذلك، في المثال البرمجي الخاص بنا، لا يزال المترجم حرًا في تحسين قراءة x في حلقة while، مما يؤدي إلى غير محدد سلوك. يؤثر المتغير فقط على الوصول إلى الذاكرة، وليس سلوك الترابط.

حواجز الذاكرة وتكامل الترابط

يتطلب تكامل الترابط آليات مزامنة مناسبة لضمان رؤية الكتابة في موضوع واحد إلى آخر . يحدد نموذج الذاكرة C 11 على وجه التحديد متى وكيف تصبح عمليات الكتابة مرئية لخيوط أخرى. volatile لا يعالج هذا المطلب.

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

الاستنتاجات

في لغة C 11، تظل العناصر المتقلبة ذات صلة لمنع التحسينات التي قد تؤدي إلى وصول غير صحيح إلى الذاكرة. ومع ذلك، فإنه لا يكفي للبرمجة متعددة مؤشرات الترابط. لا تزال آليات المزامنة المناسبة مطلوبة لضمان سلامة سلسلة الرسائل والسلوك المحدد في البيئات المتزامنة.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3