अपरिवर्तनीय डेटा संरचनाओं के विक्रय बिंदुओं में से एक यह है कि वे स्वचालित रूप से समानांतर होते हैं। यदि कोई उत्परिवर्तन नहीं चल रहा है, तो किसी कार्यात्मक डेटा संरचना के संदर्भ किसी भी लॉकिंग के बिना धागे के बीच पारित किए जा सकते हैं।गैर-कचरा एकत्रित संदर्भ में समरूपता के लिए अभी भी कार्यात्मक/अपरिवर्तनीय डेटा संरचनाएं उपयोगी हो सकती हैं?
मैं कैसे कार्यात्मक डेटा संरचनाओं ग में लागू किया जाएगा ++ के बारे में सोच करने के लिए मिला है। मान लीजिए कि हमारे पास हमारे डेटा संरचना के प्रत्येक नोड पर संदर्भ संख्या है। (कार्यात्मक डेटा संरचनाएं डेटा संरचना के पुराने और अद्यतन सदस्यों के बीच संरचना साझा करती हैं, इसलिए नोड्स एक विशेष डेटा संरचना के लिए विशिष्ट रूप से संबंधित नहीं होंगे।)
समस्या यह है कि यदि संदर्भ संख्याओं को विभिन्न धागे में अद्यतन किया जा रहा है, तो हमारे डेटा संरचना अब धागा सुरक्षित नहीं है। और प्रत्येक एकल नोड में एक म्यूटेक्स को जोड़ना महंगा होता है और समेकन के लिए अपरिवर्तनीय डेटा संरचनाओं का उपयोग करने के उद्देश्य को हरा देता है।
क्या सी ++ (और अन्य गैर-कचरा एकत्रित वातावरण) में समवर्ती अपरिवर्तनीय डेटा संरचनाएं काम करने का कोई तरीका है?
मैं इसमें कोई विशेषज्ञ नहीं हूं, लेकिन आप प्रति-थ्रेड संदर्भ संख्या संग्रहीत कर सकते हैं, और केवल उन पर एक ताला लगा सकते हैं ताकि सभी धागे नोड पर शून्य संदर्भ तक पहुंच गए हों। लेकिन मुझे यकीन है कि इस से अधिक सुरुचिपूर्ण समाधान हैं या शायद सामान्य रूप से संदर्भ गणना। – sinelaw
यहाँ सी के लिए एक लोकप्रिय अपरिवर्तनीय डेटा संरचना ++ http://www.sgi.com/tech/stl/Rope.html – ybungalobill
आप 'shared_ptr' के कार्यान्वयन पर दिखाई दे सकता है, कि ठीक उसी मुद्दा एक कुशल thread- की आवश्यकता होगी, के साथ सामना कर रहा है सुरक्षित संदर्भ गिनती। –