एक कक्षा में उन दो चर कल्पना कीजिए:
int i = 0;
volatile int v = 0;
और उन दो तरीकों
void write() {
i = 5;
v = 2;
}
void read() {
if (v == 2) { System.out.println(i); }
}
अस्थिर अर्थ विज्ञान गारंटी देते हैं कि read
जाएगा या तो प्रिंट 5 या कुछ भी नहीं (यह मानते हुए कोई अन्य तरीकों को संशोधित कर रहे पाठ्यक्रम के क्षेत्र)। यदि v
अस्थिर नहीं थे, read
भी 0 प्रिंट कर सकते हैं क्योंकि i = 5
और v = 2
को फिर से व्यवस्थित किया जा सकता था। मुझे लगता है कि अनुक्रमिक स्थिरता से आपका मतलब है, जिसका व्यापक अर्थ है।
दूसरी ओर, अस्थिरता परमाणुता की गारंटी नहीं देता है। तो दो धागे इस विधि समवर्ती कॉल करते हैं (v ही volatile int
है):
load v;
increment v;
store v;
:
void increment() {
v++;
}
आप कोई गारंटी नहीं कि v 2. द्वारा बढ़ा दी जाएगी इसका कारण यह है v++
वास्तव में तीन बयान है
और थ्रेड इंटरलीविंग वी के कारण केवल एक बार बढ़ाया जा सकता है (दोनों थ्रेड एक ही मान लोड करेंगे)।
मुझे नहीं लगता कि 'अस्थिर' जावा में सी/सी ++ में समान गारंटी प्रदान करता है। विशेष रूप से, मुझे नहीं लगता कि यह सी में प्रदान करता है जिसे आप अनुक्रमिक स्थिरता कहते हैं (यानी कि स्मृति बाड़ अन्य चर पर लागू होती है) - टीबीसी। – assylias
@ वासिलियास का मतलब यह नहीं था कि अस्थिर का सी/सी ++ में समान अर्थ है। मुझे यकीन है कि यह नहीं करता है।मैं 'अनुक्रमिक स्थिरता और परमाणुता' की अवधारणा का जिक्र कर रहा था जो सी/सी ++ और जावा के बीच आम है। सी/सी ++ अस्थिर कीवर्ड में परिवर्तनीय उपयोग के अनुकूलन को रोकता है और अस्थिर चर के साथ ऑपरेशन से पहले निर्दिष्ट किए गए संचालन के बीच अनुक्रमिक-स्थिरता बनाए रखने के लिए उपयोग नहीं किया जाता है .. –