यदि मैं एक बार एक सामान्य शब्दकोश शुरू करता हूं, और आगे कोई जोड़/अपडेट/हटाने की अनुमति नहीं है, तो क्या यह लॉकिंग के साथ इसे पढ़ने से कई धागे पढ़ने के लिए सुरक्षित है (यह मानते हुए कि शब्दकोश पाठकों के शुरू होने से पहले शुरू किया गया है)?किसी शब्दकोश की थ्रेड सुरक्षा <TKey, TValue>
गैर-सामान्य HashTable कि कहना है कि यह कई पाठकों के लिए सुरक्षित है के लिए मदद में एक नोट है, लेकिन मैं हाँ, यह सुरक्षित है जेनेरिक शब्दकोश
बस यह सुनिश्चित करना चाहते हैं कि मैं समझता हूं कि "यहां तक कि ..." उद्धृत पैराग्राफ का हिस्सा सही ढंग से है। क्या यह सच है कि: (1) यदि शब्दकोश अब संशोधित नहीं किया जाएगा (जैसा कि ओपी के प्रश्न में उल्लिखित है), तो गणना करना कोई समस्या नहीं होगी। (2) यदि शब्दकोश भविष्य में संभावित रूप से संशोधित किया जाएगा, तो 'ConcurrentDictionary' गणना भी "आंतरिक रूप से थ्रेड-सुरक्षित प्रक्रिया नहीं है"। सही बात? – RayLuo
@RayLuo: आम तौर पर आपको एक संग्रह को संशोधित करने की अनुमति नहीं है, जबकि गणना "उड़ान में" है, भले ही यह बहुप्रचारित या एकल थ्रेड हो। –
समवर्ती ढांचे के संग्रह (उदा।, 'System.Collections.Concurrent.ConcurrentDictionary') आम तौर पर गणना के दौरान संशोधन की अनुमति देते हैं। हालांकि, वे संग्रह की एक प्रति बनाकर और प्रतिलिपि बनाने के द्वारा इसे पूरा करते हैं। और प्रतिलिपि बनाते समय पूरा संग्रह लॉक हो जाता है। एक ढांचा अभियंता तर्क दे सकता है कि इसका मतलब है कि आप संग्रह में संशोधन नहीं कर रहे हैं, जबकि गणना "उड़ान में" है (चूंकि हुड के नीचे, पूरी चीज लॉक हुई थी, जबकि गणना "उड़ान में" थी, लेकिन फ्रेमवर्क उपयोगकर्ता के परिप्रेक्ष्य से , गणना उड़ान में है। – Brian