لماذا يستخدم متجر std::atomic XCHG لتحقيق الاتساق المتسلسل
في سياق std::atomic لبنيتي x86 وx86_64، عملية تخزين ذات تناسق متسلسل (std::memory_order_seq_cst) تستخدم XCHG بدلاً من مخزن بسيط مع حاجز ذاكرة كتقنية لتحقيق دلالات الإصدار المتسلسل.
الاتساق المتسلسل وxchg
يشير التناسق المتسلسل إلى أن جميع عمليات الذاكرة تظهر وكأنها يتم تنفيذها بترتيب تسلسلي ما، وهذا الترتيب هو نفسه بالنسبة لجميع سلاسل العمليات. XCHG، تعليمات x86 التي تتبادل قيم معاملتين ذريًا، تلبي بطبيعتها متطلبات الاتساق المتسلسل. باستخدام XCHG لإجراء عملية كتابة، يضمن std::atomic أن يصبح المتجر مرئيًا عالميًا لجميع سلاسل الرسائل عند نقطة معينة في ترتيب التنفيذ، مما يمنع إعادة الترتيب مع العمليات اللاحقة.
mov- store mfence vs. XCHG
في حين أن متجر mov بسيط متبوعًا بسياج ذاكرة (مثل mfence) يمكن أن يوفر نظريًا دلالات الإصدار، إلا أنه لا يكفي لعمليات مخزن الإصدار المتسلسل. MFENCE، هي تعليمات سياج الذاكرة التي تنشئ حاجزًا للذاكرة، وتضمن التزام عمليات الكتابة السابقة بالذاكرة قبل المتابعة. ومع ذلك، فإنه لا يمنع إعادة ترتيب عمليات التحميل اللاحقة قبل مخزن الإصدار.
اعتبارات الأداء
الاختيار بين mov-store mfence وXCHG للإصدار المتسلسل تتضمن عمليات المتجر مقايضات في الأداء.
تفاصيل التنفيذ
من الناحية العملية، يختلف التنفيذ المحدد لمتجر std::atomic مع الاتساق المتسلسل اعتمادًا على المترجم وهندسة الأجهزة.
اكتساب السياج الضمني
البيان الذي x86 المتاجر التي لديها سياج اكتساب ضمني غير صحيح. تحتوي المتاجر الموجودة على x86 على دلالات إصدار، وليس دلالات مكتسبة. يتم عادةً فرض الحصول على دلالات باستخدام حواجز الذاكرة مثل mfence أو عمليات القراءة الذرية باستخدام دلالات std::memory_order_acquire.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3