免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
151 [报告]
发表于 2006-08-12 00:50 |只看该作者
小c辛苦了。

论坛徽章:
0
152 [报告]
发表于 2006-08-12 00:52 |只看该作者
原帖由 aero 于 2006-8-12 00:50 发表
小c辛苦了。

Lucy可是个好女孩~~

其实,我是一个机会主义者~`~


广告时间:小c可是个好小伙~~

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

论坛徽章:
0
153 [报告]
发表于 2006-08-12 01:00 |只看该作者
>> 我到第一次听说原子性还可以从过程和结果两种方式去理解。

这是因为对于语言层面上的一个语句来说,如果没有同步保证的话来讨论它的原子性不是很明智。大部分赋值语句可以对应着一系列的指令,这时显然这个赋值操作过程不是原子的,但是就赋值的结果来说(左操作数有没有出现中间值),可能是原子的,也可能不是。

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

严格来说不是这样的,因为如 x = 123; 这样进行的立即数赋值可能只需要诸如 movl    $123, -4(%ebp) 一条指令,所以无论是赋值过程还是结果都是原子性的。

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

单条指令,如 movl %eax, b 的执行不可被中断,所以其操作,无论结果还是过程,都是原子的。

问题在于(前面也已经提到过),一个赋值语句的向左操作数写入的过程可能不是由一条传送指令、而是由两条或者以上的传送指令组成(比如对于 long long int 变量一般需要要两条传送指令完成赋值。虽然不常见,但是有的系统即使对于 int 变量也是这样)。如果是这种情况,显然赋值不是原子操作。

论坛徽章:
0
154 [报告]
发表于 2006-08-12 08:08 |只看该作者
153楼的,你的最后一条显然没有明白 gvim 的意思。不好好看帖,打屁屁



再争下去没意思了,只灌水...




PS:怎么还打起来了?君子动手不动口   你们这样是不对滴,打伤了人多不好呀。就算没有打到人打到花花草草的也不好呀......

[ 本帖最后由 isjfk 于 2006-8-12 08:16 编辑 ]

论坛徽章:
0
155 [报告]
发表于 2006-08-12 10:36 |只看该作者
movl $0,%eax
也不是原子的.

论坛徽章:
0
156 [报告]
发表于 2006-08-12 10:42 |只看该作者
原帖由 flw2 于 2006-8-12 10:36 发表
movl $0,%eax
也不是原子的.


为什么这么说呢?

论坛徽章:
0
157 [报告]
发表于 2006-08-12 10:45 |只看该作者
原帖由 mik 于 2006-8-12 10:42 发表


为什么这么说呢?


为什么是原子的?

论坛徽章:
0
158 [报告]
发表于 2006-08-12 10:49 |只看该作者
原帖由 flw2 于 2006-8-12 10:45 发表


为什么是原子的?


这条指令还能拆分吗?

这个话题已经没什么好讨论的了,只是在这里灌灌水,我STOP了:wink:

论坛徽章:
0
159 [报告]
发表于 2006-08-12 10:56 |只看该作者
原帖由 mik 于 2006-8-12 10:49 发表


这条指令还能拆分吗?

这个话题已经没什么好讨论的了,只是在这里灌灌水,我STOP了:wink:

这条指令确实(可能)可以拆分 ,就象a=b,可能可以拆分一样.
我一直想不明白大家讨论怎么会这么多,为了保护一个字节把信号量都弄出来了.

论坛徽章:
0
160 [报告]
发表于 2006-08-12 13:26 |只看该作者
我前面发的贴子我认为没有whyglinux所说的逻辑问题,变量赋值包括int赋值,这是一个简单命题,既然我认为所有的赋值都不是原子的,也不必再单独说一遍int赋值也不是原子的。

我理解whyglinux的意思是说:因为大多数情况下赋值最终必然是由一条汇编语句完成的,所以这条语句是不可打断的,由此认为int赋值也是原子的。

这是一个明显的逻辑错误嘛。
就象人总是要死的,死的那一瞬间是不能打断的,难道人生是原子的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP