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

क्या std::shared_ptr वास्तव में थ्रेड-सुरक्षित है, और इंगित वस्तु में समवर्ती संशोधनों के बारे में क्या?

2025-01-07 को प्रकाशित
ब्राउज़ करें:549

Is std::shared_ptr truly thread-safe, and what about concurrent modifications to the pointed object?

std::shared_ptr की थ्रेड सुरक्षा

std::shared_ptr की थ्रेड सुरक्षा के संबंध में आपने MSDN से जो कथन उद्धृत किया है, उसकी गलत व्याख्या की जा सकती है। इसका तात्पर्य यह है कि जबकि कई थ्रेड एक साथ अलग-अलग साझा_ptr ऑब्जेक्ट को पढ़ और लिख सकते हैं, यह share_ptr ऑब्जेक्ट को संशोधित करने की सुरक्षा की गारंटी नहीं देता है।

TL;DR:

std::shared_ptr की थ्रेड सुरक्षा केवल एक ही अंतर्निहित ऑब्जेक्ट की ओर इशारा करने वाले एकाधिक पॉइंटर्स के प्रबंधन से संबंधित है। यह साझा ऑब्जेक्ट की सामग्री तक विस्तारित नहीं होता है या साझा_ptr उदाहरण पर समवर्ती लेखन नहीं करता है। ]

कंट्रोल ब्लॉक: share_ptr की संदर्भ संख्या को प्रबंधित करता है और इंगित वस्तु का उचित विनाश सुनिश्चित करता है। यह घटक थ्रेड-सुरक्षित है।

पॉइंटेड ऑब्जेक्ट: साझा की जा रही वास्तविक डेटा संरचना या ऑब्जेक्ट। इस ऑब्जेक्ट की थ्रेड सुरक्षा इसके कार्यान्वयन पर निर्भर करती है।

उदाहरण:
  • आपके कोड स्निपेट में, ग्लोबल एक कॉन्फ़िगरेशन ऑब्जेक्ट के लिए एक साझा सूचक है। थ्रेड 1 वैश्विक को अपने साझा सूचक, निजी में कॉपी करता है। यदि थ्रेड 2 को बाद में वैश्विक को संशोधित करना था, तो निजी अभी भी मूल कॉन्फ़िगरेशन ऑब्जेक्ट को इंगित करेगा, क्योंकि नियंत्रण ब्लॉक संशोधित नहीं है। हालाँकि, यदि थ्रेड 2 वैश्विक के लिए एक नया कॉन्फ़िगरेशन ऑब्जेक्ट निर्दिष्ट करता है, तो प्राइवेट मूल ऑब्जेक्ट की ओर इंगित करता रहेगा।
पॉइंटेड ऑब्जेक्ट की थ्रेड सुरक्षा:

सुरक्षित रूप से करने की क्षमता अनेक धागों के माध्यम से इंगित वस्तु को संशोधित करना वस्तु के कार्यान्वयन पर निर्भर करता है। आपके कॉन्फ़िगरेशन वर्ग के मामले में, यदि यह सिंक्रनाइज़ेशन के बिना समवर्ती लेखन की अनुमति देता है, जैसे सेटिंग्स जोड़ना या हटाना, तो कोड थ्रेड-सुरक्षित नहीं होगा।

समाधान:

ऑब्जेक्ट संशोधनों के लिए थ्रेड सुरक्षा सुनिश्चित करने के लिए, साझा_पीटीआर ऑब्जेक्ट या साझा ऑब्जेक्ट तक पहुंच की रक्षा के लिए std::mutex जैसे सिंक्रनाइज़ेशन तंत्र का उपयोग करें।

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

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

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

Copyright© 2022 湘ICP备2022001581号-3