सी # का एक बहुत अच्छा संग्रह मॉडल है, लेकिन ReadOnlyCollection क्लास पूरे मॉडल में सबसे दुर्भाग्य से कल्पना (या नामित) कक्षाओं में से एक है। इसे एक उचित रूप से एक पाठक सूची कहा जाना चाहिए, न कि एक पठनीय संग्रह।
अब, अपने प्रश्न पर जाने के लिए, यह निर्माण समय पर आपूर्ति किए गए एक आईएलआईस्ट का केवल पढ़ने वाला सजावट है। इसलिए, कोड जो ReadOnlyCollection का निर्माण करता है, मूल सूची को संशोधित कर सकता है, जिसमें सभी परिणामों के साथ बहुभाषी पहुंच के लिए होगा।
तो संग्रह संग्रह के माध्यम से गणना थ्रेड-सुरक्षित होगी अगर संग्रह वास्तव में पढ़ा गया था; लेकिन चूंकि यह केवल पढ़ने के लिए नहीं है, यह धागा सुरक्षित नहीं है। आपके पास प्रतिष्ठा की मात्रा को देखते हुए, मुझे पूरा यकीन है कि आप सोच नहीं रहे हैं कि गैर-पढ़ने-योग्य संग्रह के माध्यम से गणना करना क्यों थ्रेड सुरक्षित नहीं है।
आपके द्वारा पूछे जाने वाले कामकाज के लिए, आप या तो लॉकिंग का उपयोग कर सकते हैं, या आप लॉक-कुछ (या लॉक-ए-कम-संभव) सिद्धांत के साथ जा सकते हैं और एक वास्तविक रीड-ओनली कॉपी बना सकते हैं सूची में से।
संपादित
मैं कर रहा हूँ मेरा उत्तर कई महीने बाद फिर से पढ़ना, (धन्यवाद, के asyncwait टिप्पणी) और मुझे लगता है कि मैं अपनी प्रतिष्ठा के आधार पर मान्यताओं बनाने के बिना ओपी के सभी सवालों का जवाब देना चाहिए था। ओपी को अब तक उसका जवाब मिला है, लेकिन मैं भविष्य के पाठकों के लिए यह करूँगा।
एक वास्तविक-पढ़ने-पढ़ने वाले संग्रह के माध्यम से गणना करना आंतरिक कारणों से आंतरिक रूप से थ्रेड-सुरक्षित नहीं है, यहां तक कि एकल-थ्रेडेड परिदृश्य में भी आप इसे गणना करते समय संग्रह को संशोधित नहीं कर सकते हैं। (जावा में ConcurrentModificationException, C# में अमान्यऑपरेशन अपवाद।) एकल-थ्रेडेड परिदृश्य में आप यह सुनिश्चित कर सकते हैं कि आपका गणना कोड किसी भी तरह से संग्रह को बदलने का प्रयास नहीं करता है, लेकिन बहु-थ्रेडेड परिदृश्य में एक थ्रेड संग्रह की गणना कर सकता है जबकि एक और धागा एक ही समय में इसे बदल सकता है।
स्रोत
2011-12-22 12:16:05
ओह लड़का। मैं thread- लड़ किया गया है बहुत लंबे समय तक .NET पर सुरक्षित सूचियां। यहां कुछ पिछली चर्चाएं देखें: http://stackoverflow.com/questions/550616/lock -फ्री-स्टैक-एंड-क्यूई-इन-सी-तेज और/या यहां: http://stackoverflow.com/questions/66622/threadsafe-foreach-enumeration-of-lists – Radu094