Intel x86组件用于比较和重置内存

问题描述 投票:0回答:1

在Intel x86处理器上,是否可以在特定内存位置比较一个值与另一个值,如果比较成功则重置内存而不必担心多线程/处理器问题?我看到CMPXCHG指令 - 会有用吗?或者有比较和设置用例的东西?

assembly x86 compare-and-swap
1个回答
0
投票

CMPXCHG指令将隐含寄存器(EAX)中的值与目标进行比较,并更新零标志(EFLAGS.ZF)以指示目标中的值是否与EAX中给出的值匹配,在这种情况下,源操作数中的值(显式寄存器)存储在目标中。 CMPXCHG还使用从目标读取的值更新EAX。

维基百科将compare-and-set描述为compare-and-swap的变体,您可以在其中获得内存位置的数据是否与给定值匹配的真/假指示,从而更新内存位置。 compare-and-swap替代方法返回从内存中读取的内容,您可以自己与给定值进行比较。

http://en.wikipedia.org/wiki/Compare-and-set

...重定向到

http://en.wikipedia.org/wiki/Compare-and-swap

在这个意义上,CMPXCHG既是compare-and-set又是compare-and-swap.

您必须使用LOCK前缀来确保CMPXCHG以原子方式执行,也就是说,执行CMPXCHG的线程会在任何其他线程访问它之前读取然后写入内存位置。

你说resetting the memory if the compare succeeded如果你的意思是将内存位置设置为零,那么零是源寄存器中你想要的值。

对于做compare-and-swap的便携方式,请参阅this SO question中的资源

注意CMPXCHG指令允许目标操作数是寄存器以及存储器位置。测试8个字节时,您将使用CMPXCHG8B指令。当您在CMPXCHG8B指令上指定LOCK前缀并指定寄存器作为目标时,Pentium处理器中存在错误,您可以阅读更多相关信息here

© www.soinside.com 2019 - 2024. All rights reserved.