C++ 原子操作使用及源码剖析

输出结果:Counter = 105516 每次不一样

原因分析:

Counter++ 看似是 “一步操作”,实际拆解为 3 个步骤:

1.读取Counter的当前值到寄存器;

2.寄存器值 + 1;

3.把新值写回Counter。

多线程执行时,可能出现 “线程 A 读值后,线程 B 抢先修改并写回,线程 A 再写回旧值 + 1” 的情况,导致计数丢失。

赞(0)
未经允许不得转载:小狮博客 » C++ 原子操作使用及源码剖析
分享到: 更多 (0)

联系我们