前景提要 之前我写代码同步多线程访问时,基础数据类型都加的有 atomic 关键字,后来领导看到了说基础数据类型不加也是原子操作。 今天面试时,面试官说基数数据类型访问不是原子的,而且和编译器架构无关。 我的理解 应该加 atomic 关键字,但在现代 x86 等架构的 cpu 上对 bool ,int 类型的操作是原子的,或者说视同原子的。 原子, 类型, atomic, 编译器
https://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-vol-3a-part-1-manual.html 8.1.1 Guaranteed Atomic Operations
面试官是对的 atomic 之后是原子的 里面还涉及更深一层的 memory order “在现代 x86 等架构的 cpu 上对 bool ,int 类型的操作是原子的,或者说视同原子的” 不对 在多核多线程情况下 每个核都有自己的独占的寄存器/L1/L2 cache 不能保证原子性