假设进程P0和P1可以访问共享变量total(初始化为0)。total可能的最小结果是多少?

假设进程P0和P1可以访问共享变量total(初始化为0)。如果以下进程同时执行,total可能的最小结果是多少?
Suppose that a shared variable total (initialized as 0 ) can be accessed by the process P0 and P1. If the following processes execute concurrently, what is the probable minimum result of total?
P1:
{
    int count;
    for ( count =1; count <= 50; count++ )
        total = total + 1;
}
P2:
{
    int count;
    for ( count =1; count <= 50; count++ )
        total = total + 1;
}
选项
A.1
B.2
C.3
D.50
答案是 B 2 为什么呢

p0线程和p1线程都是第一次执行i++,cpu1和cpu2寄存器中的值为1(不写回内存),内存中的值为0

当p0线程的i++执行到99次时,此时cpu1寄存器中值为99,内存为99

当p1线程cpu2寄存器的1,写回内存覆盖内存的99,变成1

如果可以这样,那p0线程也可以同样再覆盖一次p1线程,最终结果就是2