Hacker News

C++17 स Std:Shared_mutex बुझब

टिप्पणी

2 min read Via www.cppstories.com

Mewayz Team

Editorial Team

Hacker News

C++17 सँ std::shared_mutex केँ बुझब

std::shared_mutex, जे C++17 मे पेश कैल गेल छै, एकटा सिंक्रनाइजेशन प्रिमिटिव छै जे कई थ्रेड कें एक साथ साझा (पढ़ल) लॉक कें पकड़य कें अनुमति देयत छै जखन कि लिखय कें ऑपरेशन कें लेल विशेष पहुंच सुनिश्चित करय छै. ई आधुनिक C++ म॑ सबसें आम समवर्ती चुनौती म॑ स॑ एक के हल करै छै, जेकरा म॑ डेवलपरऽ क॑ रीडर-राइटर लॉकिंग क॑ लागू करै के साफ, मानक तरीका द॑ क॑ बिना थर्ड-पार्टी लाइब्रेरी या प्लेटफॉर्म-विशिष्ट एपीआई तलक पहुँचै के काम करलऽ जाय छै.

std::shared_mutex ठीक-ठीक की अछि आओर एकरा C++17 मे किएक जोड़ल गेल छल?

C++17 सँ पहिने, डेवलपर जेकरा रीडर-राइटर सिमेंटिक्स के जरूरत छल, ओकरा प्लेटफॉर्म-विशिष्ट समाधान जेना pthread_rwlock_t पर निर्भर रहय पड़ैत छलैक जेना कि pthread_rwlock_t विंडोज पर या विंडोज पर SRWLOCK, नहि त ओ बूस्ट सन थर्ड-पार्टी लाइब्रेरी के उपयोग करत. C++17 मानक समिति न॑ ई अंतर क॑ पहचानी क॑ एकरा सीधा संबोधित करै लेली हेडर म॑ std::shared_mutex क॑ पेश करलकै ।

मूल विचार सीधा छै: बहुत सारा वास्तविक दुनिया के प्रोग्राम म॑, डाटा क॑ लिखलऽ जाय स॑ कहीं अधिक बार पढ़लऽ जाय छै । एकटा मानक std::mutex सभ पहुँच केँ क्रमबद्ध करैत अछि — रीड्स शामिल अछि — जे अनावश्यक अड़चन पैदा करैत अछि. std::shared_mutex दू लॉकिंग मोड मे अंतर कए ओहि प्रतिबंध केँ उठाबैत अछि:

  • साझा (पढ़ल) लॉकlock_shared() के माध्यम स प्राप्त; एक सँ बेसी थ्रेड एकरा एक संग राखि सकैत अछि, जे एकरा समवर्ती पढ़बाक लेल आदर्श बना दैत अछि.
  • अनन्य (लिखब) लॉकlock() के माध्यम स प्राप्त कएल गेल; एक बेर मे केवल एकटा धागा एकरा पकड़ि सकैत अछि, आओर एकरा पकड़बा काल कोनो साझा ताला केर अनुमति नहि अछि.
  • std::shared_lock — एकटा RAII रैपर जे निर्माण पर lock_shared() आ विनाश पर unlock_shared() केँ कॉल करैत अछि, संसाधन लीक केँ रोकैत अछि.
  • std::unique_lock / std::lock_guard — अनन्य मोड क' संग प्रयोग कएल जाइत अछि, ई सुनिश्चित करैत जे लिखबाक ऑपरेशन पूर्ण रूप सँ सुरक्षित आओर अपवाद-सुरक्षित अछि.

ई ड्यूल-मोड डिजाइन std::shared_mutex कें कैश, विन्यास रजिस्ट्री, आओर कोनों डाटा संरचना जैना परिदृश्यक कें लेल एकटा स्वाभाविक फिट बनायत छै जतय रीड्स कार्यभार पर हावी होयत छै.

अहाँ टिप्पणीक संग रियल कोड मे std::shared_mutex क उपयोग कोना करैत छी?

कोड मे टिप्पणी जे std::shared_mutex क उपयोग करैत अछि, विशेष रूप सँ मूल्यवान अछि किएक समवर्ती तर्कक बारे मे तर्क करब कुख्यात रूप सँ कठिन अछि. नीक तरह सं राखल गेल टिप्पणी स्पष्ट करैत अछि जे कियैक कोनो विशेष लॉक प्रकार चुनल गेल छल, जे भविष्य मे रखरखाव करय वाला के गलती सं डाटा रेस शुरू करय के जोखिम के नाटकीय रूप सं कम क दैत अछि. एतय एकटा ठेठ पैटर्न अछि :

 # <साझा_म्यूटेक्स> शामिल करू
#<अक्रमबद्ध_नक्शा> शामिल करू
# शामिल करू

class कॉन्फ़िगर रजिस्ट्री {
    परिवर्तनीय std::साझा_म्यूटेक्स mtx_; // नीचाँक नक्शाक रक्षा करैत अछि
    std::अक्रमबद्ध_नक्शा  डेटा_;

सार्वजनिक: १.
    // पथ पढ़ू: कई थ्रेड एकरा एक संग कॉल क' सकैत अछि
    std::string get (const std::string& कुंजी) const {
        std::साझा_लॉक लॉक (mtx_); // साझा ताला — समवर्ती पढ़बाक लेल सुरक्षित
        ऑटो यह = डेटा_.खोज (कुंजी);
        एकरा वापस करू != data_.end () ? it->second : "";
    } .

    // लिखें पथ: अनन्य पहुँच आवश्यक
    void सेट (const std:: स्ट्रिंग & कुंजी, const std:: स्ट्रिंग & val) {
        std:: अद्वितीय_लॉक लॉक (mtx_); // अनन्य ताला — सब पाठक के अवरुद्ध करैत अछि
        डेटा_ [कुंजी] = वैल;
    } .
};
के अनुसार

देखू जे टिप्पणी प्रत्येक लॉक चुनाव के पाछु के मंशा के कोना व्याख्या करैत अछि नै कि सिर्फ कोड की करैत अछि ओकरा दोबारा बताबय के. ई स्वर्ण मानक अछि : टिप्पणी कियैकक उत्तर देबाक चाही, की नहि । म्यूटेक्स पर mutable कीवर्ड get() कए const घोषित करबाक अनुमति दैत अछि जखन कि एखनो लॉक करबा मे सक्षम अछि, एकटा आम आओर मुहावरा पैटर्न.

<ब्लॉककोट>

कुंजी अंतर्दृष्टि: हमेशा std::shared_mutex क संग RAII लॉक रैपर (std::shared_lock, std::unique_lock) क उपयोग करू — lock() आओर unlock() कए मैन्युअल रूप स कहियो नहि कॉल करू. अपवादक उपस्थिति मे मैनुअल लॉक करब गतिरोध आओर अपरिभाषित व्यवहारक लेल एकटा गारंटीकृत मार्ग अछि.

के अछि

std::shared_mutex के साथ काम करला पर आम जाल की छै?

स्पष्ट टिप्पणी आ नीक नीयत के साथ भी, std::shared_mutex में सूक्ष्म जाल छै जे अनुभवी डेवलपर के ट्रिप करै छै. सबसँ खतरनाक अछि लॉक अपग्रेड: कोनो साझा लॉक केँ पहिने छोड़ने बिना एक्सक्लूसिव लॉक मे अपग्रेड करबाक कोनो अंतर्निहित तरीका नहि अछि. बिना रिलीज केने ऐसनऽ करै के कोशिश तुरंत गतिरोध पैदा करै छै, कैन्हेंकि थ्रेड एक साझा लॉक रखै छै जबकि एक्सक्लूसिव लॉक के इंतजार करै छै जेकरा कभियो नै देलऽ जाब॑ सकै छै जब॑ तलक कि कोनो साझा लॉक मौजूद छै — जेकरा म॑ ओकरा पकड़लऽ गेलऽ लॉक भी शामिल छै.

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →

एकटा आओर आम गलती गलत दानेदारता के रक्षा करब अछि. डेवलपर कखनो-कखनो बहुत व्यापक रूप सं लॉक करय छै, जे पाठक-लेखक पैटर्न कें उद्देश्य कें पराजित करय छै, या बहुत संकीर्ण रूप सं, विंडो छोड़य छै जतय दू अलग-अलग लॉक अधिग्रहण कें बीच अपरिवर्तनीय कें उल्लंघन करल जाय छै. टिप्पणी जे अपरिवर्तनीय कें संरक्षित कैल जा रहल छै कें वर्णन करय छै, न कि केवल लॉक करल गेलय चर कें, टीमक कें कोड समीक्षा कें दौरान सहीता कें बारे मे तर्क करय मे मदद करय छै.

प्रदर्शन सेहो अहाँकेँ आश्चर्यचकित क' सकैत अछि। बहुत रास लेखकक संग बेसी विवादित सिस्टम पर, std::shared_mutex वास्तव मे अतिरिक्त बहीखाता ओवरहेडक कारण सादा std::mutex सँ बेसी खराब प्रदर्शन क' सकैत अछि. पाठक-लेखक लॉकिंग केँ नेट जीत मानबा सँ पहिने सदिखन प्रोफाइल करू.

std::shared_mutex std::mutex आओर अन्य विकल्प क' तुलना कोना करैत अछि?

std::mutex सरल छै, जब॑ विवाद कम होय छै त॑ प्राप्त करै म॑ तेज छै, आरू जब॑ पढ़ना आरू लिखना मोटा-मोटी बराबर आवृत्ति प॑ होय छै त॑ उपयुक्त छै. std::shared_mutex चमकैत अछि जखन पढ़ैत अछि जे लिखबा सँ काफी बेसी संख्या मे रहैत अछि — स्विच पर विचार करबा सँ पहिने 10:1 या ओहि सँ बेसी अनुपात एकटा उचित नियम अछि.

C++14 std::shared_timed_mutex क' परिचय देलक, जे समयबद्ध प्रयास क' लेल try_lock_shared_for() आओर try_lock_shared_until() जोड़ैत अछि. C++17 क std::shared_mutex एकटा दुबला कार्यान्वयन क लेल समयबद्ध वेरिएंट कए छोड़ैत अछि. जँ अहाँकेँ साझा पथ पर समयबद्ध लॉकिंग चाही, तँ std::shared_timed_mutex उपलब्ध रहत आओर दुनू प्रकार पूर्ण रूपसँ मानक अछि.

|

बार-बार पूछल जाय वाला प्रश्न

की std::shared_mutex भूखमरी क' सकैत अछि?

हँ, भ' सकैत अछि। यदि नव साझा-लॉक धारक लगातार आबि रहल रहैत अछि, त' एकटा एक्सक्लूसिव-लॉक अनुरोधक अनिश्चित काल धरि प्रतीक्षा क' सकैत अछि — एकटा क्लासिक लेखक भूखमरी समस्या. C++ मानक कोनों विशिष्ट निष्पक्षता नीति कें अनिवार्य नहि करयत छै, अइ कें लेल व्यवहार कार्यान्वयन पर निर्भर करयत छै. व्यवहार मे, अधिकांश मानक पुस्तकालय कार्यान्वयन एक बेर कतार मे ठाढ़ भ गेलाक बाद लंबित अनन्य लॉक कें प्राथमिकता दैत छै, मुदा अहां कें अपन विशिष्ट टूलचेन आ प्लेटफॉर्म कें लेल एकर सत्यापन करबाक चाही अगर उत्पादन मे भूखमरी चिंता कें विषय छै.

की std::shared_mutex std::condition_variable क' संग उपयोग करबाक लेल सुरक्षित अछि?

std::condition_variable क' लेल std::unique_lock क' आवश्यकता अछि, तेँ ई std::shared_mutex क' संग सीधा संगत नहि अछि. जँ अहाँकेँ साझा म्यूटेक्सकेँ पकड़ैत काल कोनो शर्त पर प्रतीक्षा करबाक आवश्यकता अछि, तँ std::condition_variable_any क उपयोग करू, जे कोनो BasicLockable प्रकार क संग काज करैत अछि, जाहिमे std::shared_mutex कए std::shared_lock.

क संग जोड़ी देल गेल अछि

की हमरा हर बेर std::shared_mutex क उपयोग करबा पर टिप्पणी जोड़बाक चाही?

कम सं कम, म्यूटेक्स कें घोषणा पर टिप्पणी करू आ वर्णन करय कें लेल की ओ कोन डाटा कें सुरक्षा करयत छै आ इ कोन अपरिवर्तनीय कें रखरखाव करयत छै. प्रत्येक लॉक साइट पर, एकटा संक्षिप्त टिप्पणी जे इ बतायत छै की साझा बनाम विशेष पहुंच कें चयन कियाक कैल गेलय, कोड समीक्षक आ भविष्य कें रखरखाव करय वाला कें लेल महत्वपूर्ण मूल्य जोड़य छै. समवर्ती बग के पुनरुत्पादन आ ठीक करब सबसँ कठिन मे सँ एक अछि, तेँ स्पष्ट, सटीक टिप्पणी मे निवेश सँ कतेको गुना लाभांश भेटैत अछि.


जटिल प्रणालीक कें प्रबंधन — चाहे समवर्ती C++ कोड हो या कोनों पूरा व्यवसायिक संचालन — सही उपकरण आ स्पष्ट संरचना कें मांग करय छै. मेवेज 207-मॉड्यूल वाला बिजनेस ओएस छै जेकरा प॑ 138,000 स॑ भी अधिक उपयोगकर्ता के भरोसा छै कि वू मार्केटिंग, सीआरएम, ई-कॉमर्स, एनालिटिक्स, आरू बहुत कुछ म॑ वू ही स्पष्टता लानै छै, ई सब एक प्लेटफॉर्म म॑ महज $19 प्रति माह स॑ शुरू होय छै । दर्जनों डिस्कनेक्ट टूल के जुगाड़ बंद करू आओर नीक सं डिजाइन कएल गेल सॉफ्टवेयर के परिशुद्धता सं अपन बिजनेस चलाबय शुरू करू. आइ app.mewayz.com पर मेवेज के कोशिश करू आ देखू जे एकीकृत प्रणाली अहां के टीम के काज करय के तरीका के कोना बदलैत अछि.

दैत अछि

Try Mewayz Free

All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.

Start managing your business smarter today

Join 30,000+ businesses. Free forever plan · No credit card required.

Ready to put this into practice?

Join 30,000+ businesses using Mewayz. Free forever plan — no credit card required.

Start Free Trial →

Ready to take action?

Start your free Mewayz trial today

All-in-one business platform. No credit card required.

Start Free →

14-day free trial · No credit card · Cancel anytime