المتغيرات المتطايرة في لغة C 11
يثير إدخال نموذج آلة متعددة الخيوط في معيار C 11 تساؤلات حول سلوك المتغيرات المتطايرة المتغيرات، والتي تم استخدامها تقليديًا لمنع التحسين الذي قد يؤدي إلى سلوك غير محدد في البيئات المتزامنة.في لغة C 98/03، كان عدم التعرف على الخيوط المتعددة في نموذج الذاكرة يعني أن المترجم يمكنه تحسين قراءة المتغير المتطاير، مما يؤدي إلى المثال السيئ السمعة للحلقة التي لا نهاية لها في انتظار متغير لتغيير قيمته.ومع ذلك، فإن نموذج الذاكرة C 11 يعترف بإمكانية الوصول المتزامن إلى المتغيرات. هل هذا يعني أنه تم إهمال المتقلبة الآن؟
تحسينات المترجم والسلوك غير المحدد
تكمن الإجابة في الطبيعة الدقيقة لنموذج الذاكرة C 11. على الرغم من أنه يتعرف على مؤشرات الترابط المتعددة، إلا أنه لا يلغي إمكانية حدوث سلوك غير محدد عند الوصول إلى المتغيرات دون المزامنة المناسبة. حتى في بيئة متعددة الخيوط، يظل الوصول غير الذري إلى المتغيرات المشتركة غير محدد.volatile int x;void func() {
x = 0;
while (x = = 0) {}
}
حواجز الذاكرة وتكامل الترابط
يتطلب تكامل الترابط آليات مزامنة مناسبة لضمان رؤية الكتابة في موضوع واحد إلى آخر . يحدد نموذج الذاكرة C 11 على وجه التحديد متى وكيف تصبح عمليات الكتابة مرئية لخيوط أخرى. volatile لا يعالج هذا المطلب.يضمن volatile أن المترجم لا يمكنه تحسين قراءات الذاكرة من متغير، لكنه لا يوفر أي ضمانات حول رؤية الخيط. تعد حواجز الذاكرة، الصادرة عن بنيات المزامنة مثل الأقفال أو العمليات الذرية، ضرورية لضمان مزامنة الكتابة بين النوى.
الاستنتاجات
في لغة C 11، تظل العناصر المتقلبة ذات صلة لمنع التحسينات التي قد تؤدي إلى وصول غير صحيح إلى الذاكرة. ومع ذلك، فإنه لا يكفي للبرمجة متعددة مؤشرات الترابط. لا تزال آليات المزامنة المناسبة مطلوبة لضمان سلامة سلسلة الرسائل والسلوك المحدد في البيئات المتزامنة.تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3