我知道 volatile 不会强制 int 的原子性,但是如果您访问单个字节,它会强制执行原子性吗?如果我没记错的话,语义要求写入和读取始终来自内存。
或者换句话说:CPU 总是以原子方式读写字节吗?
该标准不仅没有提及任何有关原子性的内容,而且您甚至可能问了错误的问题。
CPU 通常以原子方式读取和写入单个字节。问题的出现是因为当您有多个核心时,并非所有核心都会将字节视为已同时写入。事实上,可能需要相当长的时间(就 CPU 而言,数千或数百万条指令(又名,微秒或可能毫秒))才能让所有内核都看到写入。
因此,您需要有点名不副实的 C++0x 原子操作。它们使用 CPU 指令来确保事物的顺序不会混乱,并且当其他内核在您写入后查看您写入的值时,它们会看到新值,而不是旧值。他们的工作并不完全是操作的原子性,而是确保也发生适当的同步步骤。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)