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

كيف تختلف "std::atomic" و"volatile" في برمجة C++ 11 المتزامنة؟

تم النشر بتاريخ 2025-01-16
تصفح:600

How Do `std::atomic` and `volatile` Differ in Concurrent C  11 Programming?

التزامن: الذري والمتقلب في نموذج الذاكرة C 11

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

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

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

في سياق المتغيرات المشتركة بين سلاسل العمليات، مثل ما يلي:

std::atomic ai;

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

من ناحية أخرى، يوفر النوع std::atomic ترتيب الذاكرة من خلال خيارات مختلفة مثل std::memory_order_seq_cst ، والذي يفرض ترتيبًا إجماليًا واحدًا لجميع العمليات الذرية عبر جميع المتغيرات. يضمن هذا الحفاظ على قيود الرؤية والترتيب، ولن تراقب سلاسل الرسائل القيم التي لا معنى لها بترتيب محدد بدقة.

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

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

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

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

Copyright© 2022 湘ICP备2022001581号-3