免费注册 查看新帖 |

Chinaunix

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

在应用层如何实现原子操作 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-02-13 16:15 |只看该作者
应用层可以使用gcc的 Built-in functions for atomic memory access. 请参考:
http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html

还有一篇比较有用的文章, 提供了一些包装:
http://golubenco.org/blog/atomic-operations/

论坛徽章:
0
12 [报告]
发表于 2009-02-17 11:05 |只看该作者
是进程还是线程级别的?

论坛徽章:
0
13 [报告]
发表于 2009-02-20 09:18 |只看该作者

回复 #1 blue006 的帖子

如果是c/c++应该是可以吧。
原子操作,应该是直接调用汇编指令吧,比如c里面嵌套_asm()
安小弟的想法应该是这样才行。要不然,
c/c++里面随便一条赋值指令有可能编译后就变成好几条汇编指令。比如
int a=1;
会不会被解释成好几条汇编指令,这个小弟不太清楚,不过要是
struct a b;
b = ***;
这样的结构体赋值肯定会被编译成多条汇编指令。看上去给人一个误导以为是一条命令。
实际上不是,有可能在碰到中断,信号量时被改变。
虽然小弟不太懂,但感觉应该是这样。
要写原子操作的函数,应该是嵌入汇编指令,这样你就准确的知道它是几条指令了。
如果是超过一条汇编指令,那肯定不是原子的。
是不是?小弟觉得应该是。
不过小弟懂的不多,按自己的想法说说。错了勿怪啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP