多线程之所以会导致运行结果不确定,是因为每个线程在任何运行时刻都有可能被打断。即我们看到的这些 i++,++i,i+=2都不是原子级的指令。要分析所有可能的情况,应该把它们翻译成原子级的。如:
线程1:
mov eax,i
inc eax
mov i,eax
mov eax,i
inc eax
mov i,eax
线程2:
mov eax,i
add eax,2
mov i,eax
注:我没记错的话,在线程切换的时候,eax寄存器的值会被更新。也就是说,线程1和线程2的eax是无关的。
其余的你应该可以自己分析了吧
(ps:主要是现在好困,没精力分析了,交给你自己了
)