一个全局变量tally,两个线程并发执行,问两个线程都结束后,tally取值范围。

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]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值