我知道如何使用LOCK线程安全地增加一个值:
lock inc [J];
Run Code Online (Sandbox Code Playgroud)
但是我如何以线程安全的方式阅读[J](或任何值)?LOCK前缀不能与mov一起使用.如果我做以下事情:
xor eax, eax;
lock add eax, [J];
mov [JC], eax;
Run Code Online (Sandbox Code Playgroud)
它在第2行引发错误.
首先,我发现了这个问题:如何以原子方式读取x86 ASM中的值? 但它有点不同,在我的情况下,我想在32位应用程序中原子地分配一个浮点(64位双倍)值.
来自:"英特尔®64和IA-32架构软件开发人员手册,Volume3A"
奔腾处理器(以及更新的处理器)保证以下额外的内存操作将始终以原子方式执行:
读取或写入在64位边界上对齐的四字
实际上是否可以使用一些组装技巧?