免费注册 查看新帖 |

Chinaunix

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

a++, 是不是从理论上就不可能是一条汇编语句? [复制链接]

论坛徽章:
0
51 [报告]
发表于 2007-08-14 14:13 |只看该作者
原帖由 思一克 于 2007-8-14 12:11 发表
写ASM也不能保证原子操作(SMP上)


上周刚问了一个原子操作的应用:
static __inline__ void atomic_inc(atomic_t *v)
{
    __asm__ __volatile__(
        LOCK_PREFIX "incl %0"
        :"=m" (v->counter)
        :"m" (v->counter));
}

http://bbs.chinaunix.net/viewthr ... =page%3D&page=2
关键在那个LOCK_PREFIX

这能保证原子操作吧?

论坛徽章:
0
52 [报告]
发表于 2007-08-14 14:14 |只看该作者
是的。

原帖由 tysn 于 2007-8-14 14:13 发表

上周刚问了一个原子操作的应用:
static __inline__ void atomic_inc(atomic_t *v)
{
    __asm__ __volatile__(
        LOCK_PREFIX "in ...

论坛徽章:
0
53 [报告]
发表于 2007-08-14 14:33 |只看该作者
LOCK_PREFIX很重要呢

论坛徽章:
0
54 [报告]
发表于 2007-08-14 15:50 |只看该作者
在win上实现同样功能的Interlocked函数簇都有返回值。
如:LONG InterlockedIncrement( LONG volatile* Addend);
函数返回加1后的值。

为什么atomic_inc没有返回值?难道认为没有必要?版主大大能解析下吗?

论坛徽章:
0
55 [报告]
发表于 2007-08-14 16:38 |只看该作者
恩 帖子看到后面觉得聊的有点远.........LZ的问题其实开始flw就说的很明白了
自加完全可以是一条汇编语句实现的
在x86上有inc这条自加指令 ARM的CPU上也有类似汇编指令
这个和全局变量 原子操作扯不上
至于有同学提到寻址  那些就是运算器 累加器的硬件实现了 跟汇编无关吧

学习了 谢谢~

招聘 : c/c++研发
论坛徽章:
0
56 [报告]
发表于 2007-08-14 16:40 |只看该作者
其实我觉得lz是想问a++是需要几个cpu指令周期去执行吧。而且在执行之间是否能保证原子性。

原帖由 la.lune 于 2007-8-14 16:38 发表
恩 帖子看到后面觉得聊的有点远.........LZ的问题其实开始flw就说的很明白了
自加完全可以是一条汇编语句实现的
在x86上有inc这条自加指令 ARM的CPU上也有类似汇编指令
这个和全局变量 原子操作扯不上
至于 ...

论坛徽章:
0
57 [报告]
发表于 2007-08-14 17:01 |只看该作者
存储器可以自加
在UP上单指令 =原子操作,因为单指令执行中不可能被中断。
在SMP上单指令 !=原子操作,因为设计到多CPU并发操作,凡是涉及到读-改-写模式的指令都需要加总线锁才能保证原子性。
这个问题《情景分析》上已经讲得很清楚了

论坛徽章:
0
58 [报告]
发表于 2007-08-14 17:32 |只看该作者
完全正确。


原帖由 woshiwo 于 2007-8-14 17:01 发表
存储器可以自加
在UP上单指令 =原子操作,因为单指令执行中不可能被中断。
在SMP上单指令 !=原子操作,因为设计到多CPU并发操作,凡是涉及到读-改-写模式的指令都需要加总线锁才能保证原子性。
这个问题 ...

论坛徽章:
0
59 [报告]
发表于 2007-08-14 19:27 |只看该作者
原帖由 思一克 于 2007-8-14 12:27 发表
是LOCK指令吧(?)



SuperZ 说的没错.

xchg 这条指令可以实现原子操作,当 xchg 有一个操作数是 memory 时,处理器会自动实现 lock 功能而不需添加 LOCK prefix

论坛徽章:
0
60 [报告]
发表于 2007-08-14 19:34 |只看该作者
原帖由 思一克 于 2007-8-14 17:32 发表
完全正确。





这也不能说完全正确。看是什么类型的指令。现在的 CISC 机器简单的指令被直接解码,而复杂的指令处理器内部被转化为几个宏操作,分几步来解码。
至于会不会被打断,偶没有深入了解过,不确定。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP