lockfree
عبارة عن مجموعة من هياكل البيانات الخالية من القفل المكتوبة بلغة C++ 11 القياسية ومناسبة لجميع الأنظمة الأساسية - بدءًا من الأنظمة الأساسية المضمنة بعمق وحتى HPC.
هياكل البيانات الخالية من القفل هي هياكل بيانات آمنة للاستخدام المتزامن دون الحاجة إلى استخدام آليات الاستبعاد المتبادل. إنها مفيدة للغاية للاتصالات بين العمليات، وغالبًا ما تكون أفضل بكثير من الهياكل القائمة على القفل من حيث عدد العمليات والخيوط.
lockfree
تعد هياكل البيانات هذه أكثر أداءً ويجب استخدامها بشكل عام عندما يكون هناك مؤشر ترابط/مقاطعة واحد فقط يدفع البيانات وآخر يستردها.
تعد هياكل البيانات هذه أكثر عمومية، حيث تدعم العديد من المنتجين والمستهلكين في نفس الوقت، ومع ذلك فهي تتمتع بتكاليف تخزين وأداء أعلى مقارنة بهياكل بيانات المستهلك الفردي للمنتج الواحد. كما أنها تتطلب تعليمات ذرية قد تكون مفقودة من بعض وحدات التحكم الدقيقة المنخفضة.
هناك ثلاث طرق رئيسية للحصول على المكتبة:
يستخدم lockfree
محاذاة خط التخزين المؤقت للفهارس لتجنب ظاهرة المشاركة الزائفة بشكل افتراضي، وتجنب فقدان الأداء بسبب إبطال خط التخزين المؤقت على الأنظمة المتماسكة لذاكرة التخزين المؤقت. يؤدي هذا إلى محاذاة الفهارس إلى LOCKFREE_CACHELINE_LENGTH
، 64
بشكل افتراضي.
في الأنظمة المضمنة، يجب دائمًا تعيين LOCKFREE_CACHE_COHERENT
على أنه false
لتجنب إضاعة الذاكرة.
بالإضافة إلى ذلك، تحتوي بعض الأنظمة على طول خط تخزين مؤقت غير نموذجي (على سبيل المثال، تحتوي وحدات المعالجة المركزية Apple M1/M2 على طول خط تخزين مؤقت يبلغ 128 بايت)، ويجب تعيين LOCKFREE_CACHELINE_LENGTH
وفقًا لذلك في تلك الحالات.
جميع هياكل البيانات في lockfree
مخصصة فقط للاستخدام مع الأنواع التافهة.
السبب الأكبر وراء رغبتك في استخدام بنية بيانات خالية من القفل في البيئات المستضافة هو تجنب المشكلات المحيطة بالقفل مثل حالات التوقف التام وانعكاس الأولوية وزمن وصول الوصول غير المحدد. عند استخدامها بشكل صحيح، يمكن لهياكل البيانات الخالية من القفل أيضًا تحسين الأداء في بعض السيناريوهات.
بالإضافة إلى ذلك، يوفر lockfree
طريقة لإنشاء التطبيقات والمكتبات التي يمكن تجميعها للعمل على كل من بيئات POSIX وغير POSIX بدون #ifdef
s أو تعدد الأشكال.
في حين أن القفل عادة لا يكون مكلفًا على الأنظمة المدمجة مثل وحدات التحكم الدقيقة، إلا أن هناك مجموعة واسعة من أنظمة RTOS ولا توجد واجهة برمجة تطبيقات موحدة للقفل. حقيقة وجود بنيات متعددة من 8051 إلى RISC-V تعني أن أساليب إدارة المقاطعة ليست موحدة أيضًا.
يوفر lockfree
طريقة لإنشاء تعليمات برمجية مدمجة محمولة بتكلفة أداء ضئيلة مقارنةً بالقفل، ويمكن تجميع التعليمات البرمجية باستخدام lockfree
لتشغيلها على أي نظام أساسي مضمن يدعم C++ 11. بالإضافة إلى ذلك، يمكن اختبار الكود بسهولة على جهاز مضيف دون الحاجة إلى الاستهزاء.
lockfree
؟ جميع الهياكل في lockfree
مقيدة ومبنية على المصفوفة وخالية من القفل ، كما أن هياكل بيانات spsc خالية من الانتظار وآمنة للإنهاء .
لمزيد من المعلومات حول البرمجة الخالية من القفل، قم بإلقاء نظرة على: