Intel x86组件用于比较和重置内存
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Intel x86组件用于比较和重置内存相关的知识,希望对你有一定的参考价值。
在Intel x86处理器上,是否可以在特定内存位置比较一个值与另一个值,如果比较成功则重置内存而不必担心多线程/处理器问题?我看到CMPXCHG指令 - 会有用吗?或者有比较和设置用例的东西?
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
以上是关于Intel x86组件用于比较和重置内存的主要内容,如果未能解决你的问题,请参考以下文章
cmp 不工作 - Intel x86 (IA32) 程序集
如何配置 Trigger.IO 以将 Intel Atom x86 目标用于我的 Android 虚拟设备?
markdown 在Intel Nuc上设置Ubuntu Web服务器,步骤和代码片段