在多线程编程中经常需要在不同线程之间共享一些变量,然而对于共享变量操作却经常造成一些莫名奇妙的错误,除非老老实实加锁对访问保护,否则经常出现一些(看起来)匪夷所思的情况。比如下面便是两种比较“喜闻乐见”的情况。在多线程编程中,最常拿来举例的问题便是著名的i++ 问题,即:多个线程对同一个共享变量i执行i++ 操作。这样做之所以会出现问题的原因在于i++这个操作可以分为三个步骤:。但是实际上我们在两个线程中执行了i++,原本希望i的值为2。这种重排有可能会导致一个线程内相互之间不存在依赖关系的指令交换执行顺序,以获得更高的执行效率。

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

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

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