2011-05-27 3 views
12

मैं बस सोच रहा हूं, क्या आप एक थ्रेडेड वातावरण में जावा और सी # में स्थिर चर को कैसे बढ़ाते हैं, इसके बीच कोई अंतर है?जावा परमाणु पूर्णांक और सी # इंटरलाक्ड के बीच अंतर। इन्टरमेंट विधि

जावा में आप का उपयोग परमाणु पूर्णांक: इस कार्रवाई को बनाने के लिए और सी # में आप Interlocked.Incement (संदर्भ yourVar)

का उपयोग मैं इस न द्वारा कोड आप लिखते हैं मतलब लेकिन कैसे यह वास्तव में स्मृति ताले जाता है और वास्तविक वृद्धि करता है।

+2

यह एक भाषा प्रश्न नहीं है। विभिन्न संस्करण या विभिन्न कार्यान्वयन, या वर्चुअल मशीन के विभिन्न प्लेटफ़ॉर्म लक्ष्य ऐसे कार्यों के आंतरिक व्यवहार को प्रभावित कर सकते हैं। – CodesInChaos

+0

असल में जावा बहुत, बहुत सी सीएएस आधारित है (इसके मूल में) और यह सीएएस समान प्राइमेटिव भी प्रदान करता है। तो प्रत्यारोपण: या तो एलएल/सीएस या प्राकृतिक सीएएस वास्तव में कोई फर्क नहीं पड़ता। सी # प्रत्यारोपण के लिए WinAPI interlocked समारोह का उपयोग करता है। जो अगर स्मृति अच्छी तरह से सेवा करता है तो यह w/LOCK उपसर्ग जोड़ता है। – bestsss

उत्तर

9

इंटरलाक्ड ऑपरेशन मेमोरी लॉक नहीं करता है, बल्कि ऑपरेशन के आधार पर निर्देश के लिए LOCK उपसर्ग को उत्सर्जित करता है। कारण प्रोसेसर बस लॉक पर जोर देने के लिए, इसलिए केवल एक बार निर्देश लागू किया जाता है। आप आगे देख सकते हैं following article

+4

+1, यह वह 'लॉक' नहीं है जिसे आप ढूंढ रहे हैं। – user7116

2

जावा के मामले में - "यह कैसे काम करता है" निष्पादन प्लेटफ़ॉर्म के निर्देश सेट पर निर्भर करता है। मैं पढ़ रहा था (आज के अंत में एक अंतराल ओएस अपग्रेड के इंतजार के दौरान इंतजार कर रहा था) कि x86 परमाणु xxx वर्गों को एक तुलना और स्वैप (सीएएस) निर्देश का उपयोग करके लागू किया गया है।

+0

हां, परमाणु सामान लूप (यदि (कैस) तोड़ है) जावा में। सी # में इंटरलाक्ड LOCK ADD के माध्यम से लागू किया जा सकता है। – bestsss

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