CPU对变量的计算分为三个步骤:
1. 从内存读取变量到寄存器(如add寄存器)
2. 将读取到的变量进行计算
3. 将寄存器中计算的值写入内存
如有两个线程(线程1和线程2)对共享资源(全局变量)a=0进行自增操作(a++),可能出现如下情况:
线程1进行a++时,会将变量a读取寄存器,在对变量a进行计算的时候,cpu分配给线程1的时间片到了,这时线程1将阻塞,a = 0,cpu会将变量的值和状态等存起来(供其再次获得时间片使用);
这时线程2将运行,cpu给线程2的时间片足够将a++操作执行完(即从内存读取变量到寄存器、将变量加1、再将1写入到a的地址中),现在a=1,线程2结束;
这时线程1有获得时间片,从阻塞的地方继续执行(即将变量a加1、再将1写入a的地址),这样原先a = 1被线程1重新赋值为1
标签:全局变量,变量,++,共享资源,线程,寄存器,多线程,读取 From: https://www.cnblogs.com/zj-studyrecoding/p/17256824.html