免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
1 [报告]
发表于 2006-08-10 20:41 |显示全部楼层
原帖由 isjfk 于 2006-8-10 08:41 发表

机器指令总是具有原子性的,不可能被中断(除非断电或者硬件设计问题)。

前面不是有人说, INC/DEC/ADD 指令不是原子的吗?

论坛徽章:
0
2 [报告]
发表于 2006-08-11 20:51 |显示全部楼层
原帖由 assiss 于 2006-8-11 17:16 发表
请问,到底什么是原子的?
以系统调用为例,哪个系统调用可以说是原子的?

以write(fd=STDERR_FILENO, buff, len=4)为例,
假设write需要2个mov就可以完成(多么有效率的系统啊)
mov1
...被打断,另一线程 ...

他们讨论的是机器底层的原子操作. 及一条或多条指令操作, 从开始到结束, 内存变量保持完整一致. 不受中断和别的CPU竞争的影响. 从外部看, 内存变量要么没变, 要么变成原子操作的结果, 其间不可能有第三种可能.

你说的系统调用read/write的原子性, 是狭义的逻辑的原子操作. 及对所有的应用程序, 看到的, 或能改变的(别的read/write请求), 要么是write前的内容, 要么是write后的内容, 不可能在中间. 当然kernel是可以看到,甚至更改中间结果的.

个人理解.

论坛徽章:
0
3 [报告]
发表于 2006-08-13 20:53 |显示全部楼层
我觉得一个操作是否原子, 要看该操作是否需要多次使用数据总线. 而不是几条指令.

大多数int赋值(立即数)只要一次memory cycle. 是原子的. 另外象 a=b 或 a++, 也许只要一条指令, 但必需读写两个memory cycle, 不是原子的, 需要加锁.

现在的CPU向多核发展, 同步是很重要的. 但code不能依赖某些硬件的实现, 先要保证正确.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP