जावा में अद्यतन करना, डबल और लम्बे चर को अद्यतन करना परमाणु नहीं हो सकता है, क्योंकि डबल/लंबे दो अलग-अलग 32 बिट्स चर के रूप में माना जा रहा है।डबल ऑपरेशन परमाणु
http://java.sun.com/docs/books/jls/second_edition/html/memory.doc.html#28733
सी ++ में, अगर मैं 32 बिट इंटेल प्रोसेसर + माइक्रोसॉफ्ट विजुअल C++ संकलक उपयोग कर रहा हूँ, डबल अपडेट कर रहा है (8 बाइट) आपरेशन परमाणु?
मुझे इस व्यवहार पर अधिक विशिष्टता का उल्लेख नहीं मिल रहा है।
थ्रेड एक चर एक्स 1 लिखने की कोशिश कर:
जब मैं कहता हूँ "परमाणु चर", यहाँ मैं क्या मतलब है। थ्रेड बी चर 2 के लिए लिखने की कोशिश कर रहा है।
हमें चर x से मान 1 या 2 प्राप्त होगा, लेकिन एक अपरिभाषित मान नहीं है।
हां, 32-बिट x86 (मूल पेंटियम के बाद) में [कुशल हार्डवेयर समर्थन] है (https://stackoverflow.com/questions/36624881/why-is-integer-assignment-on-a- स्वाभाविक रूप से- निर्दिष्ट - उपलब्ध -टॉमिक) लॉक-फ्री 'std :: atomic 'लोड, स्टोर और सीएएस के लिए)। चाहे आपका कंपाइलर कुशल कोड बनाता है या नहीं, एक और मुद्दा है: https://stackoverflow.com/questions/45055402/atomic-double-floating-point-or-sse-avx-vector-load-store-on-x86-64। संरेखित 'डबल' कभी "फाड़ना" नहीं होगा, लेकिन 'std :: atomic ' का उपयोग करना सुरक्षित है। –