2010-06-29 60 views

回答

2

根據80386 Instruction Manual,在交換期間斷言BUS LOCKLOCK前綴對此操作沒有優先級,I/O Privilege Level的值也不是。

我的建議是,由於文檔指出BUS LOCK而不管LOCK前綴的存在斷言,LOCK XCHG EAX, mem是安全的,否則。如有疑問,請添加LOCK

12

自386天以來,無論您是否將鎖前綴放在上面,xchg都會聲明鎖定信號。在IA-32指令集參考N-Z中,Intel's documentation對此非常清楚。

17

英特爾的文檔似乎很清楚,它是多餘的。

IA-32英特爾®架構 軟件開發人員手冊 卷3A: 系統編程指南,第1部分

7.1.2.1說:

上的處理器自動跟蹤鎖定操作語義如下 :

  • 當執行引用m的XCHG指令埃默裏。

同樣,

英特爾®64和IA-32架構 軟件開發人員手冊 卷2B: 指令集參考,NZ

XCHG:

如果內存操作數被引用時,處理器的鎖定協議自動爲 impl無論是否存在LOCK前綴或IOPL的值,都會在交換操作期間出現。

注意,這實際上並不意味着LOCK#信號鎖定前綴是否被使用,7.1.4介紹如何在以後的處理器鎖定機制沒有LOCK#被保存,如果存儲位置被緩存。聰明,肯定在我的頭上。

+0

Oracle Hotspot JVM上的PrintAssembly選項似乎也同意這一點。在生成彙編時,它在x86-64上的xchg指令上沒有鎖定前綴。 – 2013-11-13 22:29:14

相關問題