العمليات الذرية C ++ للهياكل الخالية من القفل

StackOverflow https://stackoverflow.com/questions/930897

  •  06-09-2019
  •  | 
  •  

سؤال

أقوم بتنفيذ آلية خالية من القفل باستخدام تعليمات Atomic (Double) ومقارنة وتعليمات مبادلة مثل CMPXCHG16B

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

ملاحظة: أعرف أن دول مجلس التعاون الخليجي لديه بعض الأعمال المدمجة (على الأقل ل CAS)

http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/atomic-builtins.html#atomic-builtins.

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

المحلول

بالفعل أجاب كيندوف هنا.

ستوفر معيار C ++ 0x بعض أنواع البيانات الذرية, ، أساسا أنواع عدد صحيح وباطلة باستخدام STD :: القالب Atomic <>. يذكر هذا المقال مشروع Bohem Atomic_ops التي يمكنك تنزيلها واستخدامها اليوم.

إذا لم يكن الأمر كذلك، فلا يمكنك تطبيق مجمعك مضمن في المحول البرمجي؟ وأنا أعلم MSVC لديه __asامة الكلمة الرئيسية لإجراءات مجمع مضمنة. يقول جوجل نعم, ، مجلس التعاون الخليجي يمكن أن تفعل ذلك أيضا.

نصائح أخرى

ستدعم المعيار "C ++ 0x" لمعيار C ++ العمليات الذرية و C - على سبيل المثال http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html. لمناقشة واضحة معقولة. حتى تتم الموافقة على المعيار القادم القادم وتنفيذها على نطاق واسع، بالطبع، لا توجد وسيلة للحصول على هذه الوظيفة "محددة" عبر المحامرة؛ إذا كنت مهتما بمحاميل محطات محددة خارج مجلس التعاون الخليجي، فربما يمكنك فتح سؤال آخر على وجه التحديد عنها.

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