मैं थोड़ा उलझन में हूँ ...क्या संचालन परमाणु संचालन
यह सच है कि \ कई धागे से लिख पढ़ने सभी लंबी छोड़कर है और डबल परमाणु संचालन कर रहे हैं और यह केवल लंबे समय के साथ अस्थिर का उपयोग करें और दोगुना करने की जरूरत है कर रहे हैं?
मैं थोड़ा उलझन में हूँ ...क्या संचालन परमाणु संचालन
यह सच है कि \ कई धागे से लिख पढ़ने सभी लंबी छोड़कर है और डबल परमाणु संचालन कर रहे हैं और यह केवल लंबे समय के साथ अस्थिर का उपयोग करें और दोगुना करने की जरूरत है कर रहे हैं?
ऐसा लगता है कि आप जेएलएस के this section का जिक्र कर रहे हैं। यह सभी प्राचीन प्रकारों के लिए गारंटीकृत है - double
और long
को छोड़कर - सभी धागे कुछ मान देखेंगे जो वास्तव में उस चर को लिखा गया था। (double
और long
के साथ, पहले चार बाइट्स एक थ्रेड द्वारा लिखे गए थे, और अंतिम चार बाइट्स अन्य थ्रेड द्वारा जेएलएस के उस खंड में निर्दिष्ट किए गए थे।) लेकिन वे उसी मूल्य पर आवश्यक नहीं होंगे उसी समय जब चर को volatile
चिह्नित किया जाता है।
भी volatile
का उपयोग कर, x += 3
क्योंकि यह x = x + 3
जो पढ़ने और एक लिखने करता है, और पढ़ने और लिखने के बीच x
को लिखते हैं वहाँ हो सकता है, परमाणु नहीं है। यही कारण है कि हमारे पास AtomicInteger
जैसी चीजें हैं और java.util.concurrent
में अन्य उपयोगिताएं हैं।
यह सही नहीं लगता है।
एक परमाणु ऑपरेशन वह है जो सभी धागे को संसाधन तक पहुंचने के लिए इंतजार करने के लिए मजबूर करता है जब तक कि कोई अन्य धागा इसके साथ नहीं किया जाता। मैं नहीं देखता कि अन्य डेटा प्रकार परमाणु क्यों होंगे, और अन्य नहीं।
चलो थ्रेड-सुरक्षित के साथ परमाणु भ्रमित नहीं करते हैं। लंबे और डबल लेखन नीचे परमाणु नहीं हैं क्योंकि प्रत्येक दो अलग 32 बिट स्टोर हैं। गैर लंबे/डबल फ़ील्ड को संग्रहीत करना और लोड करना पूरी तरह से परमाणु मानते हैं कि वे एक यौगिक लिखते नहीं हैं (उदाहरण के लिए i++
)।
परमाणु द्वारा मेरा मतलब है कि आप एक ही क्षेत्र में विभिन्न वस्तुओं को लिखने वाले कई धागे के परिणामस्वरूप कुछ खराब वस्तुएं नहीं पढ़ेंगे।
से Java Concurrency In Practice 3.1.2बाहर का पतली Aire सुरक्षा: एक धागा तुल्यकालन के बिना एक चर लेगा, तो वह एक बासी मूल्य देख सकते हैं, लेकिन कम से कम यह एक मूल्य देखता है कि वास्तव में यादृच्छिक मूल्य के बजाय कुछ धागे द्वारा वहां रखा गया था। यह सभी चर के लिए सच है, 64-बिट लंबे और डबल को छोड़कर, जो अस्थिर नहीं हैं। JVM को 64-बिट को दो अलग-अलग 32-बिट ऑपरेशंस के रूप में पढ़ने या लिखने की अनुमति है जो परमाणु नहीं हैं।
अस्थिर सिर्फ atomically
इसका मतलब है कि अन्य थ्रेड अद्यतन मूल्य तुरंत देख सकते हैं (और इसे बाहर अनुकूलित नहीं किया जा सकता है कि)
आप एक स्रोत है मूल्य लेखन के अलावा अन्य अर्थ विज्ञान है इसके लिए? – paislee