指令重排有两层含义:
编译器重排和cpu执行时重排。
x86的强内存模型只是保证cpu在执行时不会破坏汇编指令的内存访问顺序,但编译器在生成指令时就可能已经重排过了。
总之,仔细理解c++定义的的六种内存模型,并适当运用,因为内存模型也是有代价的,运用不当的话可能比锁的开销还大。
所以我的建议:用锁搞定数据结构,流程操作数据,比如你的例子就是很差的模型。就当你开始学习多线程随便举了个例子。
【 在 grainbuds 的大作中提到: 】
: 查了一下资料,是否至少在x86/64下没问题,因为具有strong memory model
: 【 在 foliver 的大作中提到: 】
: : 和原子性关系不大,重点得保证test的赋值一定是最后执行。
: ...................
--来自微水木3.5.11
--
FROM 140.206.195.*