代码:
int tally = 0;//glable
void ThreadProc()
{
for(int i = 1; i <= 50; i++)
tally += 1;
}
答案:
[50,100]
解析:
tally += 1 分为三条指令:
(1)tally内存进入寄存器;(2)寄存器加1;(3)寄存器数据放回内存tally;
最坏的情况: 就是线程一读tally,线程二也读tally,线程一寄存器加一,线程二寄存器加一,线程一放回tally,线程二放回tally,这种情况虽然二个线程都对tally加1,但显然只加了一次。所以到最后只加50次。
最好的情况: 就是线程一的for结束,再到线程二的for,一共执行100次。