سؤال

في تطبيق C++ Linux، ما هي أبسط طريقة للحصول على الوظيفة التي متشابكة وظائف على Win32 توفر؟على وجه التحديد، طريقة خفيفة الوزن لزيادة أو إضافة أعداد صحيحة 32 أو 64 بت؟

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

المحلول 7

وبعد مزيد من المراجعة، هذا تبدو واعدة.ياي تجاوز سعة المكدس.

نصائح أخرى

إنتل مفتوحة المصدر ThreadBuildingBlocks يحتوي على قالب، Atomic، الذي يقدم نفس الوظيفة التي توفرها فئة Interlocked الخاصة بـ .NET.

على عكس Atomic المضمنة في دول مجلس التعاون الخليجي، فهي متعددة المنصات ولا تعتمد على مترجم معين.وكما أشار نيمانيا تريفونوفيتش بشكل صحيح أعلاه، فإن الأمر يعتمد على المقارنة والمبادلة تعليمات وحدة المعالجة المركزية مقدمة من شرائح x86 وItanium.أعتقد أنك لا تتوقع أي شيء آخر من مكتبة Intel:)

فقط بعض الملاحظات لتوضيح المشكلة التي لا علاقة لها بها لينكس.

آر دبليو إم عمليات (القراءة والتعديل والكتابة) وتلك التي لا يتم تنفيذها في خطوة واحدة تحتاج إلى دعم الأجهزة لتنفيذها ذريًا;من بينها الزيادات والتناقصات، fetch_and_add، وما إلى ذلك.

بالنسبة لبعض البنيات (بما في ذلك I386 وAMD_64 وIA64) يتمتع gcc بدعم مدمج للوصول إلى الذاكرة الذرية، وبالتالي لا يلزم استخدام libray خارجي. هنا يمكنك قراءة بعض المعلومات حول API.

بالمعنى الدقيق للكلمة، لا يستطيع Linux تقديم وظائف ذرية "متشابكة" مثل تلك الموجودة في Win32، وذلك ببساطة لأن هذه الوظائف تتطلب دعم الأجهزة، ويعمل Linux على بعض الأنظمة الأساسية التي لا تقدم هذا الدعم.بعد قولي هذا، إذا كان بإمكانك تقييد نفسك على Intel x86/x64، فقم بإلقاء نظرة على تنفيذ العد المرجعي في مكتبة المؤشرات المشتركة Boost.

ال الذري الوظائف من Apache Portable Runtime قريبة جدًا من وظائف Win32 InterlockedXXX.

يمكنك إدراج بعض رموز التجميع في المصدر الخاص بك لاستخدام تعليمات x68 المتشابكة مباشرةً.

يجب عليك استخدام أ قفل xadd عملية.

انظر على سبيل المثال هذا.

توفر المكتبة العفوية الشائعة إلى حد ما والمستخدمة في برمجة GTK وQT وكذلك المستقلة مجموعة متنوعة من العمليات الذرية.يرى http://library.gnome.org/devel/glib/2.16/glib-Atomic-Operations.html للحصول على قائمة.هناك g_atomic وظائف لمعظم العمليات التي يدعمها Interlocked على Win32، وعلى الأنظمة الأساسية حيث يدعم الجهاز هذه العمليات بشكل مباشر، يتم تضمينها كرمز التجميع المطلوب.

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