6

this प्रश्न के उत्तर के अनुसार, ऐसा लगता है कि x86 पर LOCK CMPXCHG वास्तव में पूर्ण बाधा का कारण बनता है। संभवतः, यह Unsafe.compareAndSwapInt() हुड के नीचे भी उत्पन्न होता है। मैं यह देखने के लिए संघर्ष कर रहा हूं कि ऐसा क्यों है: कैश लाइन को अपडेट करने के बाद, एमईएसआई प्रोटोकॉल के साथ, क्या सीपीयू सीएएस प्रदर्शन करने वाले कोर के सभी स्टोर/लोड बफर को निकालने के बजाय, अन्य कोरों पर बस उस कैश लाइन को अमान्य कर सकता है? मुझे बल्कि अपमानजनक लगता है ...x86 पर तुलना करें और स्वैप करें - यह एक पूर्ण बाधा क्यों है?

+0

एक पूर्ण बाधा के साथ, आप वास्तव में एक कैश लाइन की बजाय अपने सभी मिस्ड पूर्वानुमान परिवर्तनों को फ्लश करेंगे, तो क्या यह पूर्ण बाधा से भी बदतर नहीं होगा? लेकिन जाहिर है, मैं यहाँ sth गायब हूँ :) – Bober02

+0

[तुलना और स्वैप] (https://en.wikipedia.org/wiki/compare-and-swap) विकिपीडिया पर यह शामिल है, * यह स्मृति स्थान की सामग्री की तुलना करता है किसी दिए गए मान पर और, केवल तभी वे समान हैं, उस स्मृति स्थान की सामग्री को एक नए दिए गए मान में संशोधित करते हैं। यह एक परमाणु ऑपरेशन के रूप में किया जाता है। परमाणुता गारंटी देता है कि नए मूल्य की गणना अद्यतित जानकारी के आधार पर की जाती है; अगर इस दौरान किसी अन्य थ्रेड द्वारा मूल्य अपडेट किया गया था, तो लेखन विफल हो जाएगा। * पूर्ण बाधा के बिना इसे बाधित किया जा सकता है (या अन्यथा अपडेट किया गया) और यह परमाणु को अमान्य कर सकता है। –

उत्तर

1

जहां तक ​​मैं देख सकता हूं आपका उत्तर टिप्पणियों में है - एमईएसआई अपडेट कैश, Store/Load buffers नहीं। लेकिन LOCK CMPXCHG लॉक करें: locked operations serialize all outstanding load and store operation - यही कारण है कि इस स्टोर से स्टोर/लोड बफर को निकालने की आवश्यकता है (और दूसरों को विस्तृत here के रूप में नहीं)।

तो वर्तमान सीपीयू को हालिया मूल्य पर परमाणु संचालन करना है - जो स्टोर/लोड बफर में रह सकता है, यही कारण है कि वास्तव में इसे निकालने के लिए बाड़ की आवश्यकता होती है।

+0

मुझे मिल गया! हमें गलती से सिंक करने की जरूरत है कि हम कैश लाइन को स्वैप करें, शांत! एक और बात - ओ पूर्ण मेम बाधा वास्तव में अन्य CPU के स्टोर बफर फ़्लश होने का कारण बनती है? या केवल एक धागा चालू है? दूसरे शब्दों में, मैं इस धारणा के तहत था कि अन्य सीपीयू के लंबित परिवर्तन मेरे सीपीयू के लोड बफर में हैं, इसलिए मेम बाधा सिर्फ उन – Bober02

+0

@ Bober02 को हटा देती है, मैंने वास्तव में कुछ और स्पष्ट करने के लिए उत्तर अपडेट किया है - मेरी समझ के अनुसार। – Eugene

संबंधित मुद्दे