免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: mingjwan

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

论坛徽章:
0
发表于 2006-08-09 11:03 |显示全部楼层
count++应该是一条指令。
我觉得FLW的程序思路有问题。
如果把线程函数改成:

  1. void *incCount( int id )
  2. {
  3.     int i,j;

  4.         printf( "Hello, I am pthread %d\n", id );
  5.         for( i=0; i<1000; i++ ){
  6.                 for(j=0; j<50000;j++)
  7.                         count++;
  8.         }

  9.         printf( "[%d] Done.\n", id );
  10.         return NULL;
  11. }
复制代码


则最后结果总为1000×50000×6.

速度慢的机子需要调整i,j值,保证在main printf count之前线程全部执行完毕。

[ 本帖最后由 assiss 于 2006-8-9 11:06 编辑 ]

论坛徽章:
0
发表于 2006-08-09 11:14 |显示全部楼层
我知道FLW的程序错在哪了。
就是线程里的那句:count=0;

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

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

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

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

论坛徽章:
0
发表于 2006-08-09 11:35 |显示全部楼层
LOCK前缀好像是对多CPU起作用的,封锁总线。

论坛徽章:
0
发表于 2006-08-09 11:48 |显示全部楼层
原帖由 思一克 于 2006-8-9 09:53 发表
8951单片 肯定比INTEL 586 “笨”了。

我说“笨”没有不好的意思。各有各的用途。

从性能上说的话,别说是 586,恐怕跟 8088 比都好不到哪儿去。

但是如果只是简单的控制电路,51 单片机拿来焊上一个晶振两个电容,接上电源就可以用,x86 CPU 呢?没有一堆的电源电路、振荡电路、北桥芯片、RAM、ROM 以及复杂的布线等等的跑得起来?从这一点上,即使是最新的 Intel Core Duo 都比 51 单片机要“笨”的多。

论坛徽章:
0
发表于 2006-08-09 12:32 |显示全部楼层
to flw
我去掉count = 0;
得到的结果是:count = [1824470000];
是不是能说明是原子的了.

论坛徽章:
0
发表于 2006-08-09 13:14 |显示全部楼层
弱弱地问一句,flw的程序是原子应该是啥结果,不是原子应该是啥结果。

论坛徽章:
0
发表于 2006-08-09 14:12 |显示全部楼层
原帖由 lonelyair 于 2006-8-9 12:32 发表
to flw
我去掉count = 0;
得到的结果是:count = [1824470000];
是不是能说明是原子的了.

是啊.我的结果是
count = [-2143167296]
Done.

我想应该说明不是原子的了.如果是原子的,理论值是60000才对啊.

论坛徽章:
0
发表于 2006-08-09 14:34 |显示全部楼层
不用加。
可以第一个THREAD 将count 设为0x11111111
第二个设22222222,
。。。
第6个设66666666
循环10000次
检查数值,如果数值为这六个数之一,就是原子的,可以保持沉默。
否则打印出来信息,就不是原子的。

论坛徽章:
0
发表于 2006-08-09 14:42 |显示全部楼层
在我机器上不是原子的(sun solaris),结果如下:
count = [93969837]
count = [76408895]
count = [93133775]
count = [223344317]
count = [141327456]
(原版)


count = [572662306]
思一克的结论

[ 本帖最后由 aple_smx 于 2006-8-9 14:53 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP