2010-06-29 3 views
13

हैं mem एक साझा स्मृति स्थान, मैं क्या ज़रूरत है है:एक मल्टीकोर x86 पर, XCHG के उपसर्ग के रूप में आवश्यक एक LOCK है?

XCHG EAX,mem 

या:

LOCK XCHG EAX,mem 

atomically विनिमय करना है?

इस उपज दोनों को हां और कोई जवाब नहीं मिला। क्या कोई निश्चित रूप से यह जानता है?

उत्तर

2

80386 Instruction Manual के अनुसार, BUS LOCK एक्सचेंज की अवधि के लिए जोर दिया जाता है। इस ऑपरेशन के लिए LOCK उपसर्ग की कोई प्राथमिकता नहीं है और न ही I/O Privilege Level का मान है।

मेरे सुझाव है कि जब से प्रलेखन कहा गया है कि BUS LOCKLOCK उपसर्ग की उपस्थिति की परवाह किए बिना जोर दिया जाता है LOCK XCHG EAX, mem अन्यथा सुरक्षित है। संदेह में, LOCK जोड़ें।

12

386 दिनों के बाद, xchg लॉक सिग्नल पर जोर देगा कि आपने उस पर लॉक उपसर्ग डाला है या नहीं। Intel's documentation आईए -32 निर्देश सेट संदर्भ एन-जेड में यह स्पष्ट रूप से शामिल है।

17

इंटेल का दस्तावेज स्पष्ट रूप से स्पष्ट लगता है कि यह अनावश्यक है।

IA-32 इंटेल वास्तुकला सॉफ्टवेयर डेवलपर की मैनुअल खंड 3 ए: सिस्टम प्रोग्रामिंग गाइड, भाग 1

7.1.2.1 कहते हैं:

संचालन जिस पर प्रोसेसर को अपने आप लॉक इस प्रकार है अर्थशास्त्र निम्नानुसार हैं:

  • जब XCHG निर्देश निष्पादित करता है तो संदर्भ m एमोरी।
इसी

,

इंटेल 64 और IA-32 आर्किटेक्चर सॉफ्टवेयर डेवलपर की मैनुअल वॉल्यूम 2 ​​बी: निर्देश सेट संदर्भ, न्यूजीलैंड

XCHG:

तो एक मेमोरी ऑपरेंड का संदर्भ दिया गया है, प्रोसेसर लॉकिंग प्रोटोकॉल स्वचालित रूप से इम्प्लायर है LOCK उपसर्ग या आईओपीएल के मूल्य की उपस्थिति या अनुपस्थिति के बावजूद एक्सचेंज ऑपरेशन की अवधि के लिए तैयार किया गया।

ध्यान दें कि यह वास्तव में मतलब यह नहीं है कि लॉक # संकेत जोर दिया जाता है या नहीं, लॉक उपसर्ग प्रयोग किया जाता है, 7.1.4 बताता है कि कैसे बाद में प्रोसेसर अर्थ विज्ञान ताला लगा पर बिना एक ताला # संरक्षित कर रहे हैं, तो स्मृति स्थान कैश किया गया है चालाक, और निश्चित रूप से मेरे सिर पर।

+0

ओरेकल हॉटस्पॉट JVM पर PrintAssembly विकल्प भी इस बात से सहमत है। असेंबली उत्पन्न करते समय, यह x86-64 पर xchg निर्देश पर _not_ लॉक उपसर्ग है। –

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