我知道如何在 x86 ASM 中自动写入一个值。但我该如何阅读呢? LOCK 前缀不能与 mov 一起使用。
为了增加价值,我正在做:
lock inc dword ptr Counter
如何以线程安全的方式读取 Counter?
正如我向你解释的那样this https://stackoverflow.com/questions/3343589/how-do-i-use-the-lock-asm-prefix-to-read-a-value post:
访问可缓存内存
跨总线宽度、缓存线分割,
并且不保证页面边界
由 Intel Core 2 Duo 实现原子化,
英特尔酷睿双核、奔腾 M、奔腾 4、
Intel Xeon、P6 系列、Pentium 和
Intel486处理器。英特尔酷睿2
双核、英特尔酷睿双核、奔腾 M、
Pentium 4、Intel Xeon 和 P6 系列
处理器提供总线控制信号
允许外部存储器子系统
使分割访问成为原子的;
然而,非对齐数据访问将
严重影响性能
处理器,应该避免。
So use:
LOCK CMPXCHG EAX, [J]
首先锁定 CMPXCHG 栅栏高速缓存,然后将 EAX 与目标值进行比较,如果目标值不相等,则 EAX 中的结果就是目标值。
编辑:
链接至:
英特尔® 64 和 IA-32 架构软件开发人员手册 http://www.intel.com/products/processor/manuals/
In 第 3A 卷:系统编程指南 http://www.intel.com/Assets/PDF/manual/253668.pdf检查第 8.1.1 节
另请检查:优化参考手册部分:CHAPTER 7 OPTIMIZING CACHE USAGE http://www.intel.com/Assets/PDF/manual/248966.pdf
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)