免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
141 [报告]
发表于 2006-08-11 22:59 |只看该作者
原帖由 cellar 于 2006-8-11 22:20 发表
各位可以随便翻一下经典的多线程编程的书籍,几乎每本都在访问共享变量的时候先加锁,再读写,如果赋值操作在操作层面上来说是原子的(先不管这个定义是不是准确,为了说明问题),那这些书都是多此一举的吗?


注意在这里讨论的是对 int 变量的赋值是否是原子的,而且即使是对 int 变量的赋值,并不是在所有的平台上都是原子操作,这时就要进行同步保证(比如加锁)。你说的共享变量的访问情况可能是:1. 对 int 的赋值不是原子的。2. 访问的是长度大于 int 的数据。3. 是对一组变量的访问。上述无论哪种情况都需要同步保证。

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
142 [报告]
发表于 2006-08-11 23:08 |只看该作者
原帖由 whyglinux 于 2006-8-11 22:03 发表
gvim 引用的一段话很好地说明了原子操作的特征:

the set of operations either succeeds or fails all at once. No in-between state is accessible.

然而这两句话可以对赋值操作的原子性产生两种不同的理 ...


我到第一次听说原子性还可以从过程和结果两种方式去理解。

如你说所,过程不是原子的已经达成共识。

那么我第二次问你“赋值结果”是什么意思?
你的意思是否是 重点在最后的往左操作数b写入的 movl %eax, b 一句是原子的,那么整个 b=i 的赋值操作就是原子的?

你的意思是原子性要么全做,要么全不做?
如上述 b = i;在@23发生中断的时候,赋值源 i 都变了,你还能得到正确的 b 的结果?
赋值到没有进行一半,movl %eax, b肯定是执行了;
不过,如此这般的话,连最起码的正确性都有问题,那还谈什么原子性呢?

[ 本帖最后由 gvim 于 2006-8-11 23:09 编辑 ]

论坛徽章:
0
143 [报告]
发表于 2006-08-11 23:34 |只看该作者
原帖由 gvim 于 2006-8-11 23:08 发表


我到第一次听说原子性还可以从过程和结果两种方式去理解。

如你说所,过程不是原子的已经达成共识。

那么我第二次问你“赋值结果”是什么意思?
你的意思是否是 重点在最后的往左操作数b写入的 movl % ...


你所认同的原子操作是 CPU 的调度单位,是一条指令的执行,

他们认同的原子操作是 OS 的调度单位,也就是利用信号量,临界点等手段来保证操作的执行。

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
144 [报告]
发表于 2006-08-11 23:51 |只看该作者
原帖由 mik 于 2006-8-11 23:34 发表


你所认同的原子操作是 CPU 的调度单位,是一条指令的执行,

他们认同的原子操作是 OS 的调度单位,也就是利用信号量,临界点等手段来保证操作的执行。


整篇帖子的讨论 什么时候又把信号量,临界点拖出来了?真是莫名其妙。
"int变量的赋值" 你认为是OS在为变量赋值吗?真是答非所问。
有人说把一条赋值语句分成N条指令后仍然是原子的,但是我的论点里什么时候把原子性特定在CPU里了?我只是说最底层的原子性是硬件提供的,上层再利用下层,上上层再利用上层。

最后,请你运行我111楼的程序片断,如果没有错误的话再来讨论,请不要想当然的给我下定义,好吗?

既然大家认为讨论的不是一个东西,那么对于这篇帖子我不再发表任何技术见解。
不过对于想了解正确答案的朋友,还请自己翻翻书去求证到底可否如思一克和whyglinux两位朋友所认为的那样去想象"int变量的赋值"这个简单论题的原子性/原子操作。
如同前面我对isjfk 朋友说的:我能说的就这么多了。

[ 本帖最后由 gvim 于 2006-8-12 00:25 编辑 ]

论坛徽章:
0
145 [报告]
发表于 2006-08-12 00:02 |只看该作者
原帖由 gvim 于 2006-8-11 23:51 发表


整篇帖子的讨论 什么时候又把信号量,临界点拖出来了?真是莫名其妙。
"int变量的赋值" 你认为是OS在为变量赋值吗?真是答非所问。
有人说把一条赋值语句分成N条指令后仍然是原子的,但是我的论点 ...





[ 本帖最后由 mik 于 2006-8-12 00:34 编辑 ]

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
146 [报告]
发表于 2006-08-12 00:07 |只看该作者
edited by converse

[ 本帖最后由 converse 于 2006-8-12 00:36 编辑 ]

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
147 [报告]
发表于 2006-08-12 00:21 |只看该作者
edited by converse

[ 本帖最后由 converse 于 2006-8-12 00:36 编辑 ]

论坛徽章:
0
148 [报告]
发表于 2006-08-12 00:23 |只看该作者
请不要在贴子里面用一些人身攻击的词语,雷老虎说了:以德服人,好不容易出来一个讨论这么激烈的贴子不要被口水给玷污了,最后把论坛的气氛搞砸了受损的还是大家,所以希望各位适可而止,谢谢....~~~

技术上的好坏还是不要牵扯到人品吧,就事论事不要扯其它的东西为好,水平人品如何公道自在人心,不是你几句话就能说的清编辩的明白的.

[ 本帖最后由 converse 于 2006-8-12 00:26 编辑 ]

论坛徽章:
0
149 [报告]
发表于 2006-08-12 00:28 |只看该作者
done~~

[ 本帖最后由 converse 于 2006-8-12 00:36 编辑 ]

论坛徽章:
0
150 [报告]
发表于 2006-08-12 00:32 |只看该作者
done~~

[ 本帖最后由 converse 于 2006-8-12 00:37 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP