请教昨天的一个笔试题目

strive_only 2012-09-23 09:21:59
在Intel CPU上,以下多线程对int型变量x的操作,哪几个不是原子操作,假定变量的地址都是对齐的 [多项选择]( )
A. x=y
B. x++
C. ++x
D. x=1

A的过程为,取y的值到寄存器,然后把寄存器的值给x所在的内存。 所以A不是原子操作

B. 开辟一个临时变量。然后把原来的变量+1操作。 应当也不是原子操作。

C。 直接 inc, 应当是原子操作

D. 原子操作。

请教一下上面理解正确吗?
...全文
212 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
stereoMatching 2012-09-24
  • 打赏
  • 举报
回复
C++98,03不保证int是原子操作
标准对原子操作的支援需等到C++11的std::atomic
那个考官是在糊弄你?或者你的题目写得不完全?

http://en.cppreference.com/w/cpp/atomic/atomic
daiyier 2012-09-24
  • 打赏
  • 举报
回复
ABC
strive_only 2012-09-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
在Intel CPU上,以下多线程对int型变量x的操作,哪几个不是原子操作,假定变量的地址都是对齐的 [多项选择]( )
A. x=y
B. x++
C. ++x
D. x=1

A的过程为,取y的值到寄存器,然后把寄存器的值给x所在的内存。 所以A不是原子操作

B. 开辟一个临时变量。然后把原来的变量+1操作。 应当也不是原子操作。

C。 直接 inc, 应当是原子操作……
[/Quote]

今天看到面试官的答案了... ABC
C 不是原子操作
nice_cxf 2012-09-24
  • 打赏
  • 举报
回复
lz理解基本正确,理论上3实际上保证不了,不过现在的硬件基本都支持3是原子操作
ohayou 2012-09-24
  • 打赏
  • 举报
回复
只有D是原子操作
皮特尔 2012-09-24
  • 打赏
  • 举报
回复
怎么笔试题还考这些定义性的知识?
strive_only 2012-09-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

ABC
[/Quote]

求原因. x=1,不是立即数操作吗
strive_only 2012-09-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

没有一个是。
[/Quote]

可以给出原因吗?
shirui8653719 2012-09-23
  • 打赏
  • 举报
回复
求正确答案。
ForestDB 2012-09-23
  • 打赏
  • 举报
回复
没有一个是。
  • 打赏
  • 举报
回复
是的,对齐的情况下,凡是汇编能单条语句的都是原子操作

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧