Iam*_*mIC 6 x86 assembly atomic thread-safety
我知道如何在x86 ASM中自动写入一个值.但我怎么读一个?LOCK前缀不能与mov一起使用.
为了增加价值,我正在做:
lock inc dword ptr Counter
Run Code Online (Sandbox Code Playgroud)
如何以线程安全的方式读取Counter?
正如我在这篇文章中向你解释的那样:
通过英特尔酷睿2双核处理器,英特尔酷睿双核处理器,奔腾M,奔腾4,英特尔至强,P6系列,奔腾和英特尔486,无法保证对可缓存的内存进行访问,这些内存分布在总线宽度,缓存行和页面边界上处理器.Intel Core 2 Duo,Intel Core Duo,Pentium M,Pentium 4,Intel Xeon和P6系列处理器提供总线控制信号,允许外部存储器子系统将分离访问原子化; 但是,非对齐数据访问会严重影响处理器的性能,应该避免.
所以使用:
LOCK CMPXCHG EAX, [J]
Run Code Online (Sandbox Code Playgroud)
LOCK CMPXCHG第一个fence高速缓存并且比EAX与目标值相比,如果目标值不等于那么EAX中的结果是目标值.
编辑:链接到:
在第3A卷:系统编程指南中,请参阅第8.1.1节
我不是汇编专家,但字大小(在 x86、32 位上)读/写应该已经是原子的了。
您需要锁定增量的原因是因为这既是读取又是写入。