免费注册 查看新帖 |

Chinaunix

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

对int变量的赋值是原子操作吗? [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
1 [报告]
发表于 2006-08-09 09:52 |显示全部楼层
整型变量赋值本来就不是原子的,
不过不是原子的倒也不是说它会分字节拷贝。

两个线程共享同一个变量是否需要加锁,
根据需要来定。
但是如果两个线程有可能同时修改这个变量的话,
那么一定是需要加锁的。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2006-08-09 10:20 |显示全部楼层
我刚才写了个例子。
http://svn.perlchina.org/trunk/m ... read/is_int_atomic/
如果多个线程同时修改一个变量是原子的,可以不加锁的话,那么这个程序每次运行的结果应该一定是 10000 的整数倍。
可惜它在我的机器上不是。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2006-08-09 10:45 |显示全部楼层
哦,搞错了。
赋值在 x86 上自然是一条指令,那应该是原子的。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2006-08-09 10:50 |显示全部楼层
count ++;
应该不是一条指令。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2006-08-09 11:23 |显示全部楼层
原帖由 assiss 于 2006-8-9 11:14 发表
我知道FLW的程序错在哪了。
就是线程里的那句:count=0;

当6个线程一起执行的时候,他那里count++刚到888,你这里给它来个归零,全乱套了。

哦,你说的非常之如此有道理,呵呵。
全乱套了。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2006-08-11 13:44 |显示全部楼层
我支持 mq110 和 gvim 的说法。
不过我之前写的那个程序并不好,所以我现在不再就这个话题说什么了。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2006-08-11 14:57 |显示全部楼层
原帖由 assiss 于 2006-8-11 14:53 发表
弱弱地问一句:什么是原子的?
你们争论的让人觉得似乎不是同一个问题。

系统调用是原子的吗?

另外,思一克版主在第9页的程序思路也有些问题:

我也觉得好像不是一个问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP