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

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

一、多线程下共享变量的问题

在多线程编程中经常需要在不同线程之间共享一些变量,然而对于共享变量操作却经常造成一些莫名奇妙的错误,除非老老实实加锁对访问保护,否则经常出现一些(看起来)匪夷所思的情况。比如下面便是两种比较“喜闻乐见”的情况。

(a) i++问题

在多线程编程中,最常拿来举例的问题便是著名的i++ 问题,即:多个线程对同一个共享变量i执行i++ 操作。这样做之所以会出现问题的原因在于i++这个操作可以分为三个步骤:

 

step operation
1 i->reg(读取i的值到寄存器)
2 inc-reg(在寄存器中自增i的值)
3 reg->i (写回内存中的i)