首页
社区
课程
招聘
[求助]程序开发中原子操作和汇编指令执行周期的关系,疑惑中
发表于: 2013-3-22 11:32 4613

[求助]程序开发中原子操作和汇编指令执行周期的关系,疑惑中

2013-3-22 11:32
4613
最近在看锁无关的线程同步,提到cmpxchg是原子操作,但是这个指令执行周期应该是2,同样像inc dec等好多指令在对内存操作时也是两个甚至多个时钟执行周期,也是原子操作吗?
多线程中使用对一个内存使用inc操作,能保证多线程同步吗?谢谢。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 623
活跃值: (40)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
谁规定 cmpxchg 是原子的?
2013-3-22 11:35
0
雪    币: 4817
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
任何指令都是原子的啊,肯定不会被中断的,跟指令周期没关系的吧

cmpxchg指令,只要是指令,肯定是原子操作,关键是如果没有这个指令,你可能需要多个简单的指令去完成这个功能,这才有可能被中断呢。

inc eax,是原子操作
但是如果这样操作内存
mov eax, [0x8000000]
inc eax
mov [0x8000000], eax
那么这个内存加一的操作就不是原子操作了,涉及三条指令,可能被中断。
如果你使用lock xadd,那就是一条指令完成这个内存加一的操作,就不会被中断了
对于lock,有详细解析的http://bbs.pediy.com/showthread.php?t=84326

PS:我也就了解一些,说错了别介意,呵呵
2013-3-22 12:00
0
雪    币: 123
活跃值: (95)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
谢了,没想到这么快就有人指点了。
2013-3-22 14:30
0
游客
登录 | 注册 方可回帖
返回
//