"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > std::lock_guard बनाम std::scoped_lock: कब कौन सा चुनें?

std::lock_guard बनाम std::scoped_lock: कब कौन सा चुनें?

2024-11-08 को प्रकाशित
ब्राउज़ करें:959

std::lock_guard vs. std::scoped_lock: When to Choose Which?

std::lock_guard बनाम std::scoped_lock पर विचार

C 17 ने एक नवीन लॉक क्लास की शुरुआत की, std::scoped_lock , जो आदरणीय std::lock_guard के साथ समानताएं साझा करता है। यह आलेख इन दो लॉकिंग तंत्रों के बीच के अंतरों पर प्रकाश डालता है, जो आपको आपकी विशिष्ट आवश्यकताओं के लिए इष्टतम उपकरण चुनने में मार्गदर्शन करता है।

std::lock_guard

के लिए ऐसे परिदृश्य जहां आपको संपूर्ण दायरे के लिए एकल म्यूटेक्स को लॉक करने की आवश्यकता होती है, std::lock_guard std::scoped_lock की तुलना में अधिक सुरक्षित एपीआई प्रदान करता है। निम्नलिखित उदाहरण पर विचार करें:

{
    std::scoped_lock lock;  // protect this block
    ...
}

यह स्निपेट अनजाने में रनटाइम त्रुटि का परिणाम है क्योंकि यह "अदृश्य व्यवहार" में संलग्न है। ऐसा प्रतीत होता है कि यह सुचारू रूप से संकलित होता है लेकिन अंततः कोई लॉकिंग प्रभाव नहीं डालता है। इच्छित कार्यक्षमता की संभवतः आवश्यकता है:

{
    std::scoped_lock lock{mut};  // protect this block
    ...
}

लॉकिंग के लिए लक्ष्य म्यूटेक्स को स्पष्ट करने से यह समस्या हल हो जाती है। इसके विपरीत, std::lock_guard को नियोजित करने से पहले उदाहरण को संकलित करने से रोका जा सकेगा, जिससे एक स्पष्ट संकलन-समय त्रुटि उत्पन्न होगी।

std::scoped_lock का उपयोग कब करें

कब ऐसी स्थितियों का सामना करना पड़ता है जहां एकाधिक म्यूटेक्स को लॉक करने की आवश्यकता होती है, std::scoped_lock चमकता है। उदाहरण के लिए:

{
    std::scoped_lock(lock1, lock2);  // protect this block
    ...
}

यह स्निपेट ब्लॉक की अवधि के लिए संक्षेप में दो म्यूटेक्स को लॉक करता है।

निष्कर्ष

दोनों std::lock_guard और std::scoped_lock पूरा करते हैं अलग-अलग परिदृश्यों के लिए:

  • std::lock_guard पूरे दायरे में एक म्यूटेक्स को लॉक करने के लिए।
  • std::scoped_lock एकाधिक म्यूटेक्स को लॉक करने या संलग्न दायरे के भीतर अनलॉक करने के लिए।

जबकि std::scoped_lock अधिक व्यापक कार्यक्षमता प्रदान करता है, std::lock_guard विशिष्ट मामलों में उन्नत API सुरक्षा प्रदान करता है। सबसे उपयुक्त दृष्टिकोण का चयन करते समय अपने कोड की आवश्यकताओं पर ध्यानपूर्वक विचार करें।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3