"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > std::lock_guard vs std::scoped_lock: متى يجب استخدام أي قفل؟

std::lock_guard vs std::scoped_lock: متى يجب استخدام أي قفل؟

تم النشر بتاريخ 2024-11-06
تصفح:813

std::lock_guard vs std::scoped_lock: When to Use Which Lock?

std::lock_guard vs std::scoped_lock: اختيار القفل الصحيح للمهمة

مع تقديم C 17، أصبح المعيار القياسي ظهرت فئة ::scoped_lock جنبًا إلى جنب مع فئة std::lock_guard الحالية، مما أثار تساؤلات حول الاختلافات بينهما ومتى يتم استخدام كل منهما.

على الرغم من أن std::scoped_lock يشترك في أوجه التشابه مع std::lock_guard، إلا أنه يقدم بعض الفروق المهمة.

متى يتم استخدام std::lock_guard:

    استخدم std::lock_guard عند قفل كائن مزامنة واحد طوال مدة النطاق.
  • صيغته المختصرة تجعله أقل عرضة لأخطاء الاستخدام غير المقصودة من std::scoped_lock.
  • مثال:

    {
      std::lock_guard lock(my_mutex);
      // Code protected by lock
    }

متى يتم استخدام std::scoped_lock:

    استخدم std::scoped_lock عندما تتضمن الحاجة إلى الاستبعاد المتبادل كائنات مزامنة متعددة (إما عدد محدد أو حزمة معلمات قالب متنوع).
  • مثال:

    std::scoped_lock lock(mutex1, mutex2);
    // Code protected by lock

اعتبارات إضافية:

    السلامة:
  • بينما توفر كلا الفئتين مؤشر ترابط - القفل الآمن، واجهة برمجة التطبيقات الخاصة بـ std::lock_guard أكثر أمانًا قليلاً للسيناريوهات التي تتطلب قفل كائن مزامنة واحد فقط. التوافق:
  • std::lock_guard متوافق تمامًا مع إصدارات C الأقدم ويوفر التوافق مع الإصدارات السابقة .
  • المنشئ الافتراضي:
  • لا يدعم std::lock_guard المُنشئين الذين لا يأخذون أي وسيطات، بينما يسمح std::scoped_lock بحزمة معلمات فارغة.
  • الخلاصة:

يعتمد الاختيار بين std::lock_guard وstd::scoped_lock على متطلبات القفل المحددة للكود. من خلال فهم أوجه التشابه والاختلاف بينهما، يمكن للمطورين الاستفادة من فئة القفل المناسبة لضمان تعدد الخيوط الآمن والفعال.

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

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

Copyright© 2022 湘ICP备2022001581号-3