一个全局变量tally,两个线程并发执行,问两个线程都结束后,tally取值范围。
程序员文章站
2024-01-26 08:28:22
...
int tally = 0;//glable
void ThreadProc()
{
for(int i = 1; i <= 50; i++)
tally += 1;
}
一个全局变量tally,两个线程并发执行(代码段都是ThreadProc),问两个线程都结束后,tally取值范围。
首先,从JVM层面理解:tally += 1 分为三条指令:
(1)tally内存进入寄存器;(2)寄存器加1;(3)寄存器数据放回内存tally;
最坏的情况: 就是线程一读tally,线程二也读tally,线程一寄存器加一,线程二寄存器加一,线程一放回tally,线程二放回tally,这种情况虽然二个线程都对tally加1,但显然只加了一次。所以到最后只加50次。
最好的情况: 就是线程一的for结束,再到线程二的for,一共执行100次。
所以,答案应该是[50,100]