簡體   English   中英

在多核x86上,是否需要作為XCHG前綴的LOCK?

[英]On a multicore x86, is a LOCK necessary as a prefix to XCHG?

如果mem是共享內存位置,我是否需要:

XCHG EAX,mem

要么:

LOCK XCHG EAX,mem

原子地進行交換?

谷歌搜索這會產生是和否答案。 有沒有人知道這個?

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

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

7.1.2.1說:

處理器自動遵循LOCK語義的操作如下:

  • 執行引用內存的XCHG指令時。

同樣的,

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

XCHG:

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

請注意,這實際上並不意味着無論是否使用LOCK前綴都會聲明LOCK#信號,7.1.4描述了如果內存位置被緩存,后續處理器如何在沒有LOCK#的情況下保留鎖定語義。 聰明,絕對是我的頭腦。

從386天開始,無論你是否在其上放置鎖定前綴,xchg都會斷言鎖定信號。 英特爾的文檔在IA-32指令集參考NZ中非常清楚地涵蓋了這一點。

根據80386使用說明書BUS LOCK在交換期間有效。 LOCK前綴對此操作沒有優先權, I / O權限級別的值也沒有優先

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM