मैं सी ++ में एक गेम इंजन लाइब्रेरी का निर्माण कर रहा हूं। थोड़ी देर पहले मैं एक आवेदन बनाने के लिए क्यूटी का उपयोग कर रहा था और Implicit Sharing के उपयोग से मोहित था। मैं सोच रहा हूं कि कोई भी इस तकनीक को अधिक विस्तार से समझा सकता है या कार्रवाई में इसका एक सरल उदाहरण प्रदान कर सकता है।निहित साझाकरण क्या है?
उत्तर
निहित साझाकरण के पीछे मुख्य विचार अधिक सामान्य शब्द कॉपी-ऑन-राइट का उपयोग करने के आसपास लगता है। कॉपी-ऑन-राइट के पीछे विचार यह है कि प्रत्येक ऑब्जेक्ट वास्तविक कार्यान्वयन के लिए पॉइंटर के चारों ओर एक रैपर के रूप में कार्य करता है। प्रत्येक कार्यान्वयन वस्तु इसमें पॉइंटर्स की संख्या का ट्रैक रखती है। जब भी रैपर ऑब्जेक्ट पर कोई ऑपरेशन किया जाता है, तो यह केवल कार्यान्वयन ऑब्जेक्ट को अग्रेषित किया जाता है, जो वास्तविक कार्य करता है।
इस दृष्टिकोण का लाभ यह है कि इन वस्तुओं की प्रतिलिपि बनाना और विनाश सस्ते हैं। ऑब्जेक्ट की प्रतिलिपि बनाने के लिए, हम केवल एक रैपर का एक नया उदाहरण बनाते हैं, कार्यान्वयन ऑब्जेक्ट पर इंगित करने के लिए अपने सूचक को सेट करते हैं, और फिर ऑब्जेक्ट पर पॉइंटर्स की संख्या की गणना बढ़ाते हैं (इसे कभी-कभी संदर्भ संख्या कहा जाता है रास्ते में)। विनाश समान है - हम संदर्भ गणना को एक करके छोड़ देते हैं, फिर देखें कि कोई और कार्यान्वयन पर इंगित कर रहा है या नहीं। यदि नहीं, तो हम इसके संसाधनों को मुक्त करते हैं। अन्यथा, हम कुछ नहीं करते हैं और बस मान लें कि कोई और बाद में सफाई करेगा।
इस दृष्टिकोण में चुनौती यह है कि इसका मतलब है कि कई अलग-अलग वस्तुएं सभी एक ही कार्यान्वयन पर इंगित होंगी। इसका अर्थ यह है कि अगर कोई कार्यान्वयन में बदलाव करने के लिए समाप्त होता है, तो उस क्रियान्वयन के संदर्भ में प्रत्येक ऑब्जेक्ट में परिवर्तन दिखाई देंगे - एक बहुत ही गंभीर समस्या। इसे ठीक करने के लिए, हर बार एक ऑपरेशन किया जाता है जो संभावित रूप से कार्यान्वयन को बदल सकता है, ऑपरेशन यह देखने के लिए जांच करता है कि क्या कोई अन्य ऑब्जेक्ट यह भी देखकर कार्यान्वयन का संदर्भ देता है कि संदर्भ गणना समान है या नहीं। यदि कोई अन्य ऑब्जेक्ट ऑब्जेक्ट का संदर्भ नहीं देता है, तो ऑपरेशन आगे बढ़ सकता है - प्रसारों में बदलाव की कोई संभावना नहीं है। यदि डेटा का संदर्भ देने वाले कम से कम एक अन्य ऑब्जेक्ट है, तो रैपर पहले स्वयं के लिए कार्यान्वयन की एक गहरी प्रतिलिपि बनाता है और नई ऑब्जेक्ट को इंगित करने के लिए अपने पॉइंटर को बदल देता है। अब हम जानते हैं कि कोई साझाकरण नहीं हो सकता है, और बिना किसी परेशानी के बदलाव किए जा सकते हैं।
यदि आप इस कार्रवाई के कुछ उदाहरण देखना चाहते हैं, तो Stanford's introductory C++ programming course से व्याख्यान उदाहरण 15.0 और 16.0 पर एक नज़र डालें। यह दिखाता है कि किसी ऑब्जेक्ट को इस तकनीक का उपयोग करके शब्दों की सूची रखने के लिए कैसे डिज़ाइन किया जाए।
आशा है कि इससे मदद मिलती है!
- 1. मेमकेचे साझाकरण
- 2. समांतर प्रोग्रामिंग में "झूठी साझाकरण" क्या है। नेट 4.0
- 3. ड्रॉपबॉक्स साझाकरण फ़ाइल यूआरएल
- 4. एएसपी.Net कैश साझाकरण
- 5. झूठी साझाकरण और ढेर चर
- 6. सरल सी # स्क्रीन साझाकरण अनुप्रयोग
- 7. निहित समारोह
- 8. झूठी साझाकरण और परमाणु चर
- 9. pgAdmin - साझाकरण डीबी कनेक्शन परिभाषा
- 10. क्या एफ # में सी # निहित ऑपरेटर बनाने के बराबर है?
- 11. क्या कोई नक्शा नक्शा कार्यान्वयन है जो निकटतम निहित कुंजी
- 12. क्या ArrayList.clear() सभी निहित objecs को भी हटा देता है?
- 13. "फ़ंक्शन की निहित घोषणा" का क्या अर्थ है?
- 14. एक "निहित विस्तार अपसारी" scalac संदेश का क्या अर्थ है?
- 15. MySQL में निहित लेनदेन की अनुमति है?
- 16. Play2 मेरी निहित पढ़ता है या JSON
- 17. फ्लोट/इंट निहित रूपांतरण
- 18. अनुकूली निहित सतह बहुभुज
- 19. निहित रूपांतरण के लिए क्यों आधार है?
- 20. जीसीसी निहित भिन्नता
- 21. "साझाकरण" से बचने का एक अच्छा तरीका है?
- 22. निहित बनाम स्पष्ट इंटरफेस
- 23. आईओएस साझाकरण 'वैश्विक डेटा' दृश्य नियंत्रकों
- 24. दो अनुप्रयोगों के बीच डेटा साझाकरण
- 25. डब्ल्यूसीएफ डेटा अनुबंध और एनम्स का साझाकरण
- 26. क्रॉस डोमेन संसाधन साझाकरण प्राप्त करें: 'प्रतिक्रिया
- 27. एक्सप्रेसजेएस और वेबसाइट्स और सत्र साझाकरण
- 28. डायनामिक ऑब्जेक्ट निहित कास्टिंग
- 29. स्कैला ट्रांजिटिव निहित रूपांतरण
- 30. हास्केल functor निहित कानून
आपने दस्तावेज़ों के लिए एक लिंक दिया जो यह काम करता है कि एक उत्कृष्ट स्पष्टीकरण प्रदान करता है। इसमें एक संदर्भ भी है [थ्रेड डॉक्स बताते हैं कि परमाणु संदर्भ गिनती बहु-थ्रेडेड ऐप्स में कैसे मदद करती है] (http://doc.trolltech.com/latest/threads-modules.html#threads-and-implicitly-shared-classes)। अगर कुछ अभी भी अस्पष्ट नहीं है, तो आपको उस बारे में अधिक विस्तृत प्रश्न पूछना चाहिए। और यह न भूलें कि आप हमेशा क्यूटी के स्रोतों को देख सकते हैं। –
* निहित साझाकरण * के लिए दूसरा नाम * कॉपी-ऑन-राइट * है। आप इस अन्य नाम का उल्लेख करने वाले प्रश्नों पर एक नज़र डालना चाहेंगे जैसे उदाहरण के लिए: http://stackoverflow.com/questions/628938/what-is-copy-on-write –
मेरा मानना है कि निहित साझाकरण सिर्फ क्यूटी है [कॉपी-ऑन-राइट] का कार्यान्वयन (https://en.wikipedia.org/wiki/Copy-on-write)। – HelloGoodbye