假设进程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