一、多线程下共享变量的问题
在多线程编程中经常需要在不同线程之间共享一些变量,然而对于共享变量操作却经常造成一些莫名奇妙的错误,除非老老实实加锁对访问保护,否则经常出现一些(看起来)匪夷所思的情况。比如下面便是两种比较“喜闻乐见”的情况。
(a) i++问题
在多线程编程中,最常拿来举例的问题便是著名的i++ 问题,即:多个线程对同一个共享变量i执行i++ 操作。这样做之所以会出现问题的原因在于i++这个操作可以分为三个步骤:
| step | operation |
|---|---|
| 1 | i->reg(读取i的值到寄存器) |
| 2 | inc-reg(在寄存器中自增i的值) |
| 3 | reg->i (写回内存中的i) |










