this प्रश्न के उत्तर के अनुसार, ऐसा लगता है कि x86 पर LOCK CMPXCHG वास्तव में पूर्ण बाधा का कारण बनता है। संभवतः, यह Unsafe.compareAndSwapInt()
हुड के नीचे भी उत्पन्न होता है। मैं यह देखने के लिए संघर्ष कर रहा हूं कि ऐसा क्यों है: कैश लाइन को अपडेट करने के बाद, एमईएसआई प्रोटोकॉल के साथ, क्या सीपीयू सीएएस प्रदर्शन करने वाले कोर के सभी स्टोर/लोड बफर को निकालने के बजाय, अन्य कोरों पर बस उस कैश लाइन को अमान्य कर सकता है? मुझे बल्कि अपमानजनक लगता है ...x86 पर तुलना करें और स्वैप करें - यह एक पूर्ण बाधा क्यों है?
उत्तर
जहां तक मैं देख सकता हूं आपका उत्तर टिप्पणियों में है - एमईएसआई अपडेट कैश, Store/Load buffers
नहीं। लेकिन LOCK CMPXCHG
लॉक करें: locked operations serialize all outstanding load and store operation
- यही कारण है कि इस स्टोर से स्टोर/लोड बफर को निकालने की आवश्यकता है (और दूसरों को विस्तृत here के रूप में नहीं)।
तो वर्तमान सीपीयू को हालिया मूल्य पर परमाणु संचालन करना है - जो स्टोर/लोड बफर में रह सकता है, यही कारण है कि वास्तव में इसे निकालने के लिए बाड़ की आवश्यकता होती है।
मुझे मिल गया! हमें गलती से सिंक करने की जरूरत है कि हम कैश लाइन को स्वैप करें, शांत! एक और बात - ओ पूर्ण मेम बाधा वास्तव में अन्य CPU के स्टोर बफर फ़्लश होने का कारण बनती है? या केवल एक धागा चालू है? दूसरे शब्दों में, मैं इस धारणा के तहत था कि अन्य सीपीयू के लंबित परिवर्तन मेरे सीपीयू के लोड बफर में हैं, इसलिए मेम बाधा सिर्फ उन – Bober02
@ Bober02 को हटा देती है, मैंने वास्तव में कुछ और स्पष्ट करने के लिए उत्तर अपडेट किया है - मेरी समझ के अनुसार। – Eugene
- 1. सरल स्वैप फ़ंक्शन ... यह एक स्वैप क्यों नहीं करता है?
- 2. लॉक्स बनाम तुलना-और-स्वैप
- 3. क्यों यह एक वैध तुलना
- 4. यह कॉल स्वैप() अस्पष्ट क्यों है?
- 5. अधिक से अधिक तुलना और स्वैप
- 6. तुलना और स्वैप परीक्षण बनाम और सेट
- 7. उच्च स्तरीय तुलना और स्वैप (सीएएस) कार्य करता है?
- 8. Control.Monad.Morph.hoist क्यों एक मोनाद बाधा है?
- 9. आइटम एनीमेशन खींचें, छोड़ें और स्वैप करें?
- 10. चालू और पूर्ण पर अपलोड करें अपलोडिफ़
- 11. एक साथ दो टुकड़े स्वैप करें
- 12. क्यों स्वैप सी ++
- 13. जावा: यह स्वैप विधि क्यों काम नहीं करती है?
- 14. हमें x86 पर zone_highmem क्यों चाहिए?
- 15. एक पीसीएल परियोजना से डीएलएल एक x86 असेंबली क्यों है?
- 16. x86 एक पते पर जाएं
- 17. एक मान की तुलना शून्य से करें। यह सच क्यों है?
- 18. x86 LWARX और STWCX
- 19. कैसे करें: x86
- 20. Google क्लोजर तर्क स्वैप क्यों करता है?
- 21. दो कॉलम पर अनन्य बाधा पोस्ट करें: इंटीजर और बूलियन
- 22. एक विन्यास में x86 और x64 दोनों संकलित करें?
- 23. x86 असेंबलर: फ़्लोटिंग पॉइंट की तुलना
- 24. x86 पर एक बेहतर लेखन बाधा कौन सा है: लॉक + एडीएल या xchgl?
- 25. कॉर्डोवा टेलीमेट्री, यह क्या है और इसका उपयोग क्यों करें?
- 26. MySQL न तो पूर्ण बाधा
- 27. जावास्क्रिप्ट: शून्य के साथ तुलना क्यों करें?
- 28. स्ट्रिंग को शून्य से तुलना करें - Resharper क्यों सोचता है कि यह हमेशा झूठा है?
- 29. जब यह एक तुलना
- 30. क्या यह एक सूचीदृश्य है, और यह कैसे करें
एक पूर्ण बाधा के साथ, आप वास्तव में एक कैश लाइन की बजाय अपने सभी मिस्ड पूर्वानुमान परिवर्तनों को फ्लश करेंगे, तो क्या यह पूर्ण बाधा से भी बदतर नहीं होगा? लेकिन जाहिर है, मैं यहाँ sth गायब हूँ :) – Bober02
[तुलना और स्वैप] (https://en.wikipedia.org/wiki/compare-and-swap) विकिपीडिया पर यह शामिल है, * यह स्मृति स्थान की सामग्री की तुलना करता है किसी दिए गए मान पर और, केवल तभी वे समान हैं, उस स्मृति स्थान की सामग्री को एक नए दिए गए मान में संशोधित करते हैं। यह एक परमाणु ऑपरेशन के रूप में किया जाता है। परमाणुता गारंटी देता है कि नए मूल्य की गणना अद्यतित जानकारी के आधार पर की जाती है; अगर इस दौरान किसी अन्य थ्रेड द्वारा मूल्य अपडेट किया गया था, तो लेखन विफल हो जाएगा। * पूर्ण बाधा के बिना इसे बाधित किया जा सकता है (या अन्यथा अपडेट किया गया) और यह परमाणु को अमान्य कर सकता है। –