秋水-剑圣:
0041B53E mov eax,dword ptr [g_nCount1 (458A20h)]
0041B543 add eax,1
0041B546 mov dword ptr [g_nCount1 (458A20h)],eax
它中间有个ADD EAX,1,,假设在这个地方线程A的时间片到咯,它保存它的线程上下文假设此时EAX的值是1)。它不会去执行
mov dword ptr [g_nCount1 (458A20h)],eax
就并没有把累加的结果放到g_nCount1所在的内存中,然后线程B执行它的代码。B执行后g_nCount1的值变成2.然后又切换到A执行(A回复线程的上下文).这个时候A就去执行mov dword ptr [g_nCount1 (458A20h)],eax
此时线程A就把线程B所累加的值覆盖咯。g_nCount1 又变成1咯啊。就这样反复造成的最后两个结果不一样的
但是,我认为读取的值还是正确的,只不读取的还是另外一个线程上一次的值。