2010-05-09 15 views
12

2 अलग धागे होने करता है: एक सी # सरणी (पहले स्थान से जैसे) से
थ्रेड सुरक्षा

  • एक पढ़ने,
  • और एक और एक ही सी # सरणी के लिए, लेकिन एक के लिए लिख अलग-अलग स्थान (उदाहरण के लिए अंतिम स्थान)

धागा सुरक्षित है या नहीं?
(और मेरा मतलब यहां पढ़ने और न ही लिखने के बिना है)

उत्तर

8

यह विशेष मामला सुरक्षित है, हां।

किसी सरणी के विभिन्न हिस्सों को पढ़ना और लिखना अन्य परिचालनों में हस्तक्षेप नहीं करता है।

हालांकि, उसी स्थान पर पढ़ने और लिखने से आप तत्व के प्रकार और तत्वों के आकार के आधार पर समस्याएं दे सकते हैं।

+1

जब तक वे आइटम अलग-अलग CPU शब्दों में हैं – Stewart

+0

+1 कभी सोचा नहीं कि यह थ्रेडसेफ है, लेकिन मुझे समझ में आता है कि यह क्यों है। धन्यवाद! –

+0

लॉक फ्री एल्गोरिदम का उपयोग करते समय विचार करना महत्वपूर्ण है कि आप "एक ही स्थिति" के रूप में जो सोचते हैं वह उतना ही नहीं है जितना सीपीयू एक ही स्थिति के बारे में सोचता है। स्मृति की सीपीयू दृश्य सी जैसी भाषाओं से बहुत अलग है जैसे सी हमें बताता है कि बाइट पते पर कब्जा करते हैं। कुछ सीपीयू आर्किटेक्चर (विशेष रूप से एआरएम, पावर) पर कुछ डेटा प्रकारों पर भी यह सुरक्षित नहीं हो सकता है – Stewart

5

लंबी कहानी छोटी: हाँ। जब तक यह दो अलग-अलग स्थानों तक हो, यह एक सुरक्षित संचालन है।

कुछ समय पहले discussion about this था, यदि आप उत्सुक हैं तो इसमें कुछ उपयोगी जानकारी है।

+0

+1 कभी सोचा नहीं कि यह थ्रेडसेफ है, लेकिन मुझे समझ में आता है कि यह क्यों है। धन्यवाद! –

7

मुझे यकीन नहीं है कि यह सुरक्षित होने की गारंटी है। कल्पना कीजिए कि आपके पास बाइट है []। उन बाइट्स स्मृति में बारीकी से पैक कर रहे हैं। अब, यदि आप उन बाइट्स को संशोधित करते हैं तो संकलक कुछ लिखने के लिए लिख सकता है (32-बिट) आकार के पढ़ने के लिए लिखने के कार्यों को संशोधित करें। कुछ सीपीयू पर, उदाहरण के लिए एआरएम, यह संकलक के निर्देश को संशोधित करने वाली स्मृति का एकमात्र प्रकार है। यदि आप एक समय में एक से अधिक बाइट संशोधित कर रहे हैं तो यह विशेष रूप से आसान है। सीपीयू भी वही काम कर सकता है। यह इसके बारे में जानने के बिना सामान को फिर से व्यवस्थित कर सकता है। उस तरह के अनुकूलन के चेहरे में आंशिक संशोधन देखने के लिए आसन्न स्मृति पढ़ने वाले धागे के लिए संभव है। आप सामान्य रूप से इस तरह के प्रभाव को नहीं देखते हैं क्योंकि ढेर आवंटक आपके लिए अच्छा है और हमेशा आपको स्मृति देता है जो कम से कम शब्द गठबंधन होता है।

+1

+1: मेरी राय में यह सबसे अच्छा जवाब है। ताला मुक्त थ्रेडिंग मुहावरे के संदेह होने के लिए हमेशा सर्वोत्तम होता है। मैं सभी प्रकार की मेमोरी बाधा समस्याओं के बारे में सोच सकता हूं जो थ्रेड्स विभिन्न सरणी स्थितियों के साथ काम कर रहे थे, भले ही समस्याएं पैदा हो सकें। एक निश्चित उत्तर देने के लिए प्रश्न में केवल पर्याप्त जानकारी उपलब्ध नहीं है। –

संबंधित मुद्दे