免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: leilei8351
打印 上一主题 下一主题

文思创新的一个面试题 [复制链接]

论坛徽章:
0
41 [报告]
发表于 2010-03-29 11:04 |只看该作者
以前课本上说的   在一条指令的最后一个时钟周期会检测是否有硬件中断

论坛徽章:
0
42 [报告]
发表于 2010-03-29 11:23 |只看该作者
我想他主要想考i++和++i的区别,i++是先引用后增加,所以不是原子的,++i是先增加后引用,所以是原子的。
...
sbc19861004 发表于 2010-03-26 17:53



    请教下,为什么 先加后引用就是原子操作呢?
  
   不是也分2个指令吗?

   inc
     mov

还请指教,谢谢!

论坛徽章:
0
43 [报告]
发表于 2010-03-29 11:29 |只看该作者

论坛徽章:
0
44 [报告]
发表于 2010-03-29 11:52 |只看该作者
不是所有的CPU都有INC指令的
marxn 发表于 2010-03-29 09:25



所以说这个看具体实现了,但++i是在理论上可行的,但其他的不行

论坛徽章:
1
水瓶座
日期:2014-03-20 18:21:14
45 [报告]
发表于 2010-03-29 12:39 |只看该作者
都是扯淡的,完全编译器相关
现在的编译器优化程度已经到了令人发指的程度了,你原始代码怎么个写法完全无关紧要
所以不要总是吹毛求疵了
一个-O2以后,实际的汇编远远不是你的程序代码所想象的那种方式运行的

论坛徽章:
0
46 [报告]
发表于 2010-03-29 14:47 |只看该作者
令人发指啊...哈....

论坛徽章:
0
47 [报告]
发表于 2010-03-29 14:58 |只看该作者
这面试官够操的。

论坛徽章:
0
48 [报告]
发表于 2010-03-29 16:32 |只看该作者
文思创新?啥公司?没听过...

论坛徽章:
0
49 [报告]
发表于 2010-03-29 16:40 |只看该作者
对于上面的题目来说 和编译器有关。
int i;

i++;
++i;
i = i + 1;
不能保证是否为原子操作,最基本的考虑下8位机 和 32位机
个人认为,在32位机下++i最有可能是原子操作,但是就算知道++i是原子操作,又有什么用?这种写代码的方法严重影响了代码的可读性和移植性。保证线程安全的方法最好利用标准的原子操作。

论坛徽章:
0
50 [报告]
发表于 2010-03-29 18:31 |只看该作者
回复 1# leilei8351


    如果i是在线程内的话,应该都是安全的才对。除非i不在线程函数内,就是说i存储在全局bss中,那应该就只有i++ ++i是安全的了,还有前提不在16位机上,同时i是4字节。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP