जावा, जब हम साझा करने के निम्न चर दो धागे है में:लोडलोड लोडर वास्तव में क्या करता है?
int a;
volatile int b;
अगर धागा 1 करता है:
a = 5;
b = 6;
फिर एक StoreStore बाधा इन दोनों निर्देश और के बीच डाला जाता है 'एक' किया जा रहा है मुख्य स्मृति में वापस flushed।
अब अगर धागा 2 करता है:
if(b == 6)
a++;
एक LoadLoad बाधा के बीच डाला जाता है और हम एक गारंटी है कि अगर 'बी' के नए मूल्य के दृश्य तो नया मान है 'एक' के साथ-साथ दिखाई दे रहा है है । लेकिन वास्तव में यह कैसे हासिल किया जाता है? क्या लोडलोड लोड सीपीयू कैश/रजिस्टर्स को अमान्य करता है? या सिर्फ सीपीयू से अस्थिर से पढ़ने वाले चर के मान लाने के लिए एक सीपीयू निर्देशित करता है?
LoadLoad बाधाओं अनुक्रम:
मैं LoadLoad बाधा (http://gee.cs.oswego.edu/dl/jmm/cookbook.html) के बारे में इस जानकारी पाया है Load1; LoadLoad; लोड 2 सुनिश्चित करता है कि लोड 1 का डेटा लोड 2 द्वारा एक्सेस किए गए डेटा से पहले लोड किया गया है और सभी बाद के लोड निर्देश लोड किए गए हैं। सामान्य रूप से, स्पष्ट लोडलोड प्रोसेसर पर बाधाओं की आवश्यकता होती है जो सट्टा भार और/या आउट ऑफ़ ऑर्डर प्रोसेसिंग करते हैं जिसमें प्रतीक्षा लोड निर्देश बाईपास प्रतीक्षा स्टोर कर सकते हैं। प्रोसेसर पर जो लोड ऑर्डरिंग को हमेशा सुरक्षित रखने की गारंटी देते हैं, बाधाएं नो-ऑप्स की होती हैं।
लेकिन यह वास्तव में यह नहीं समझाता कि यह कैसे प्राप्त किया जाता है।
उत्तर प्रोसेसर आर्किटेक्चर पर निर्भर करता है - उसी दस्तावेज़ में प्रत्येक प्रोसेसर निर्देश के साथ एक तालिका होती है जो दिखाती है कि 'लोडलोड' उदाहरण के लिए x86 पर नो-ऑप है। – assylias
तो यह बिल्कुल कैसे काम करता है? मेरा मतलब है, स्टोरस्टोर के बाद मान स्मृति में वापस आ गए हैं। लेकिन फिर थ्रेड 2 उन्हें कैसे देखना चाहिए? यदि वह लोडलोड लोड-ऑप का मूल्यांकन करता है तो थ्रेड 2 कैश किए गए मानों का उपयोग जारी रख सकता है। – Janek
क्योंकि प्रोसेसर का मेमोरी मॉडल इतना मजबूत है कि यह गारंटी देता है कि यह मामला होगा। मैं जो कहने की कोशिश कर रहा हूं वह यह है कि जावा एक वादा करता है कि यदि आप अस्थिरता का उपयोग करते हैं, तो कुछ नहीं होगा/नहीं होगा। यह JVM में कैसे कार्यान्वित किया गया है प्रोसेसर विशिष्ट है और विज्ञापन निर्देशों का उपयोग करता है (या यदि कोई प्रासंगिक है तो कोई निर्देश नहीं)। आप यहां लोडलोड/x86 बिंदु के बारे में अधिक पढ़ सकते हैं: http://altair.cs.oswego.edu/pipermail/concurrency-interest/2012-July/009615.html – assylias