कुछ डेटाबेस कोड एक बग इस सवाल से संबंधित नहीं की तलाश में से गुजर रही है, मैंने देखा है कि कुछ स्थानों में List<T>
अनुपयुक्त इस्तेमाल किया जा रहा था। विशेष रूप से:धागा, एक लेखक के साथ सूची <T> की सुरक्षा नहीं ूगणकों
- कई सूत्र समवर्ती पाठकों के रूप में
List
तक पहुँचने, लेकिन अनुक्रमितenumerators
के बजायlist
में का उपयोग कर रहे थे। list
के लिए एक एकल लेखक नहीं था।- शून्य तुल्यकालन, पाठकों और लेखकों एक ही समय में
list
तक पहुँचने गया था, लेकिन कोड संरचना की वजह से पिछले तत्व विधि है कि मार डालाAdd()
लौटे जब तक कभी नहीं पहुँचा जा जाएगा। - कोई तत्व कभी
list
से हटा दिया गया।
सी # प्रलेखन रूप से, यह सुरक्षित नहीं थ्रेड किया जाना चाहिए। फिर भी यह कभी विफल नहीं हुआ है। मैं List
के विशिष्ट कार्यान्वयन की वजह से, सोच रहा हूँ (मैं आंतरिक रूप से यह मानते हुए कि कर रहा हूँ यह कि फिर से allocs जब यह स्थान से बाहर चलाता है सरणी एक है), यह 1-लेखक 0-प्रगणक एन पाठक एड-केवल परिदृश्य गलती से धागा सुरक्षित , या वहाँ कुछ संभावना नहीं परिदृश्य में जहाँ इस वर्तमान .NET4 कार्यान्वयन में उड़ा सकता है?
संपादित करें: महत्वपूर्ण विस्तार मैं उत्तर के कुछ पढ़ने बाहर छोड़ दिया। पाठकों List
और के रूप में केवल पढ़ने के लिए उसकी सामग्री का इलाज।
सूची की थ्रेड सुरक्षा में सूची में मौजूद ऑब्जेक्ट के फ़ील्ड की थ्रेड-सुरक्षा के साथ * कुछ भी * नहीं है। भले ही आप वास्तविक सूची थ्रेड-सुरक्षित बनाते हैं, जिस समस्या का आप वर्णन कर रहे हैं वह अभी भी मौजूद होगा। –
@ ब्रॉइस हाँ आप सही हैं, उन्हें मल्टीथ्रेड से अपडेट की जा सकने वाली प्रत्येक चीज़ के लिए लॉक करना चाहिए। –
@Chuu कोई प्रतिक्रिया? –