多线程环境下对变量的读写操作的原子性问题(一道百度笔试题引发的思考)

本文通过一道百度笔试题,探讨了多线程环境下对int型变量x的读写操作的原子性问题。x=1是原子操作,但x++和++x需要同步以防止数据竞争。x=y是否需要同步取决于程序上下文。

    最近天天专注于复习专业课知识,准备迎接十月份的校园招聘。在网上看了几套百度的笔试试题,其中有一道给我留下了深刻的印象。题目如下:

 

以下多线程对int型变量x的操作,哪几个需要进行同步:( )
A. x=y; B. x++; C. ++x; D. x=1;

从表面看上去实在是看不出什么突破口,我们不妨将这些代码译成汇编语言再来分析。

 

01  x = y; 

02  mov eax,dword ptr [y] 

03  mov dword ptr [x],eax 

04   

05  x++; 

06  mov eax,dword ptr [x] 

07  add eax,1 

08  mov dword ptr [x],eax 

09   

10  ++x; 

11  mov eax,dword ptr [x] 

12  add eax,1 

13  mov dword ptr [x],eax 

14   

15  x = 1; 

16  mov dword ptr [x],1 


 

1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值