免费注册 查看新帖 |

Chinaunix

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

[老问题]++i原子性 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-09-30 20:52 |只看该作者
这程序不能用来表示原子和非原子吧。
4915519 这个值的出现只是因为 这个线程函数的不可重入性吧。

论坛徽章:
0
12 [报告]
发表于 2010-10-08 12:27 |只看该作者
回复 11# linyunxian


    线程函数是使用了全局变量,可重入要求对全局变量的操作要互斥进行,但如果++i是原子的,这不会有问题呀。
程序的用意是测试多核机器里多线程对全局变量做++操作时系统能否保证全局变量的正确性,我用了"原子性"这个词。linyunxian是对概念有异议吗。

论坛徽章:
0
13 [报告]
发表于 2010-10-08 12:33 |只看该作者
++i首先要看编译器是怎么编译的,某些编译器比如VC在非优化版本中会编译为以下汇编代码:
__asm
{
      ...
w_anthony 发表于 2010-09-30 15:46



    lock inc dword ptr

论坛徽章:
0
14 [报告]
发表于 2010-10-08 13:24 |只看该作者
回复 12# krrping


    我的意思正好是说,在这个例子中,即便 ++i cpu是原子操作,也会出现类似的结果。

论坛徽章:
0
15 [报告]
发表于 2010-10-08 14:03 |只看该作者
回复 14# linyunxian

你是因为认为函数不是可重入函数才得出这样的结论,但++i是原子操作的话,函数不就是可重入的了吗?

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
16 [报告]
发表于 2010-10-08 14:43 |只看该作者
++i首先要看编译器是怎么编译的,某些编译器比如VC在非优化版本中会编译为以下汇编代码:
__asm
{
      ...
w_anthony 发表于 2010-09-30 15:46



感觉有些不对

论坛徽章:
0
17 [报告]
发表于 2010-10-08 16:10 |只看该作者
同求解!

论坛徽章:
0
18 [报告]
发表于 2010-10-09 15:18 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
19 [报告]
发表于 2010-10-09 16:16 |只看该作者
有些人就是搞不清楚自己需要什么类型的原子:
1. 事务性的
2. processor 执行层上的
----------------------------

事务性的,注重是逻辑,在程序逻辑上加上互斥,信号等控制手段

processor 执行层上的保证需要加 lock

论坛徽章:
0
20 [报告]
发表于 2010-10-09 16:45 |只看该作者
回复 8# w_anthony


    {:3_183:}  兄台高论,
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP