在Java中,更新double和long变量可能不是原子的,因为double/long被视为两个单独的32位变量。

http://java.sun.com/docs/books/jls/second_edition/html/memory.doc.html#28733

在C++中,如果我使用的是32位Intel处理器+ Microsoft Visual C++编译器,那么更新双(8字节)操作是原子操作吗?

我找不到关于此行为的很多规范说明。

当我说“原子变量”时,这是我的意思:

线程A试图将1写入变量x。
线程B试图将2写入变量x。

我们将从变量x中获得值1或2,但不会获得未定义的值。

最佳答案

这是特定于硬件的,并取决于体系结构。对于x86和x86_64,如果对齐,则保证8字节的写或读是原子的。引自《英特尔架构内存订购白皮书》:

关于c++ - 正在更新双重操作原子,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1292786/

10-16 07:32