C++11中的原子量和内存序详解

2020-01-06 19:27:01于海丽

 

当B判断flag为true后,断言a为1,看起来的确是这样。那么一定是这样吗?可能不是,因为编译器和CPU都可能将指令进行重排(编译器不同等级的优化和CPU的乱序执行)。实际上的执行顺序可能变成这样:

 

step thread A thread B
1 flag = true  
2   if flag== true
3   assert(a == 1)
4 a = 1