volatile是一种在C/C++中使单个字节成为原子的正确方法吗?

Axe*_*ing 11 c c++ atomic

我知道volatile不会在int上强制执行原子性,但是如果你访问单个字节会这样做吗?如果我没记错的话,语义要求写入和读取始终来自内存.

或者换句话说:CPU是否始终以原子方式读写字节?

Omn*_*ous 21

标准不仅没有说明关于原子性的任何内容,而且你甚至可能会提出错误的问题.

CPU通常以原子方式读取和写入单个字节.问题出现的原因是当您有多个内核时,并非所有内核都会将该字节视为同时写入.实际上,在所有内核看到写入之前,可能需要一段时间(在CPU中说,数千或数百万条指令(也就是微秒或可能是毫秒)).

所以,你需要有点错误的C++ 0x原子操作.他们使用CPU指令确保事物的顺序不会搞砸,并且当其他内核查看您编写后写入的值时,他们会看到新值,而不是旧值.他们的工作不仅仅是操作的原子性,而是确保适当的同步步骤也会发生.


Oli*_*rth 5

该标准没有提到原子性.