欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

一个全局变量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]

相关标签: 多线程