संभव डुप्लिकेट तक पहुँचने:
Are C# arrays thread safe?एकाधिक सूत्र एक ही बहु-आयामी सरणी
मैं अब 10 महीने के लिए प्रोग्रामिंग किया गया है सी #। अब मैं बहु-थ्रेडिंग सीख रहा हूं और अच्छी तरह से काम कर रहा हूं। मैं बहु आयाम सरणी
string[,] test = new string[5, 13];
जैसे मैं धागे तरीकों कि ऊपर सरणी के अंदर विभिन्न निर्देशांक के लिए अपने आउटपुट बचत अंत बुला होता है। किसी अन्य थ्रेड के समान स्थान पर किसी एक थ्रेड लेखन के बिना।
तो thread1test[1,10]
को लिख सकते हैं, लेकिन कोई अन्य धागा कभी test[1,10]
मेरा प्रश्न है करने के लिए लिखेंगे: मैं अपने सरणी की तरह वस्तुओं पर ताले उपयोग के बारे में पढ़ा है, मैं ताले के बारे में बिल्कुल भी चिंता करने की क्या ज़रूरत है भले ही मेरे थ्रेड एक ही समय में परीक्षण सरणी तक पहुंच सकते हैं लेकिन कभी भी समान समन्वय (स्मृति स्थान) पर नहीं लिखते?
अभी तक मेरे परीक्षण में मुझे कोई समस्या नहीं है, लेकिन अगर कोई मुझसे ज्यादा अनुभवी जानता है तो मुझे समस्या हो सकती है तो मैं उपयोग ताले में देखूंगा।
नहीं, आपको समझाया परिदृश्य में ताले की जरूरत नहीं है। लेकिन मुझे लगता है कि आप किसी बिंदु पर डेटा पढ़ रहे हैं? क्या आप पढ़ना शुरू करने से पहले अपने सभी धागे समाप्त होने तक प्रतीक्षा करते हैं? – Douglas
यदि आप ताले का उपयोग नहीं करते हैं, तो यह सुनिश्चित करने के लिए कि सभी धागे के पास 'ताजा' डेटा तक पहुंच हो, पढ़ने के लिए शुरू होने से पहले मेमोरी बाधा ('Thread.MemoryBarrier()' को कॉल करके) को याद करने की अनुशंसा की जाएगी। [अनब्लॉकिंग सिंक्रनाइज़ेशन] (http://www.albahari.com/threading/part4.aspx) इस अवधारणा के बारे में एक महान स्पष्टीकरण है। – Douglas
धन्यवाद, धागे एक मास्टर थ्रेड से उत्पन्न होते हैं, वे केवल सरणी में डेटा लिखते हैं, फिर एक बार जब वे सब खत्म हो जाते हैं, तो RunWorker मास्टर थ्रेड को समाप्त कर देता है, सरणी पढ़ता है। इसलिए मुझे लगता है कि मैं सुरक्षित हूं, स्पष्टीकरण के लिए धन्यवाद। –