मुझे पता है कि आधुनिक सीपीयू क्रम से निष्पादित हो सकते हैं, हालांकि वे हमेशा विकिपीडिया द्वारा वर्णित परिणामों में सेवानिवृत्त होते हैं।ऑर्डर निष्पादन और मेमोरी बाड़ से बाहर
"अन्य निर्देश तैयार कर रहे हैं के साथ समय में, तो फिर से आदेश अंत में परिणाम यह जाहिर होता है कि निर्देश के रूप में सामान्य प्रोसेस किया गया बनाने के लिए।" स्लॉट "ओडर प्रोसेसर में से इन भरने"
अब मल्टीकोर प्लेटफ़ॉर्म का उपयोग करते समय मेमोरी बाड़ की आवश्यकता होती है, क्योंकि ऑर्डर निष्पादन के कारण, x का गलत मान यहां मुद्रित किया जा सकता है।
Processor #1:
while f == 0
;
print x; // x might not be 42 here
Processor #2:
x = 42;
// Memory fence required here
f = 1
अब मेरी सवाल है, (मल्टीकोर प्रोसेसर मुझे लगता है के मामले में कोर) आदेश प्रोसेसर से बाहर के बाद से हमेशा में आदेश परिणाम रिटायर, तो क्या मेमोरी बाड़ की आवश्यकता है। मल्टीकोर प्रोसेसर के कोर न केवल अन्य कोरों से सेवानिवृत्त परिणाम देखता है या वे परिणाम भी देख रहे हैं जो उड़ान में हैं?
मैं उदाहरण मैं ऊपर दे दी है में मतलब है, जब प्रोसेसर 2 अंत में परिणाम संन्यास ले लेंगे, एक्स का परिणाम से पहले च आना चाहिए, है ना? मुझे पता है कि आदेश निष्पादन के दौरान यह एफx से पहले संशोधित हो सकता है लेकिन इसे x से पहले इसे सेवानिवृत्त नहीं किया होगा, है ना?
अब परिणाम और कैश समेकन तंत्र की इन-ऑर्डर सेवानिवृत्ति के साथ, आपको कभी भी x86 में मेमोरी बाड़ की आवश्यकता क्यों होगी?
ध्यान दें कि मेमोरी बाड़ हमेशा सही कोड में जोड़े में आती है: जब दो धागे संवाद करते हैं, * प्रत्येक * थ्रेड को मेमोरी एक्सेस (= बाड़) के कुछ ऑर्डरिंग करना होता है। आम तौर पर, इन बाड़ों में से एक ने सेमेन्टिक्स जारी किया है, दूसरे ने अर्थशास्त्र हासिल किया है। अपने छद्म कोड में, प्रोसेसर # 2 को असाइनमेंट (रिलीज सेमेन्टिक्स) के बीच एक लेखन बाड़ निष्पादित करना चाहिए, और प्रोसेसर # 1 को लूप और 'प्रिंट' के बीच एक पठन बाड़ (अर्थशास्त्र प्राप्त करना) जोड़ना चाहिए। कुछ बाड़ विशिष्ट प्लेटफार्मों पर अनावश्यक हो सकती हैं, लेकिन किसी भी स्रोत कोड में दोनों बाड़ (जो नोप के लिए संकलित हो सकती है) होनी चाहिए। स्टोर बफर – cmaster