Chinaunix首页 | 论坛 | 博客
  • 博客访问: 242040
  • 博文数量: 66
  • 博客积分: 290
  • 博客等级: 入伍新兵
  • 技术积分: 342
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-27 15:44
文章分类

全部博文(66)

文章存档

2013年(19)

2012年(47)

分类:

2012-11-29 09:11:16

关于整数 的原子操作,对于Atomic_t类型,一直以来,记得书上说的都是要不CPU体系结构本身支持简单的原子操作,要不提供了锁内存总线功能,可以在操作期间,防止对数据的访问发生。

今天突然想到,ARM架构本身不提供锁内存总线功能,也没有类似的原子操作的指令,那么如何实现原子操作呢?看了一下代码,原来是通过禁止中断来实现的,由于ARM体系结构不支持SMP架构,所以禁止了中断也就杜绝了代码并发的可能性,从而实现原子操作。

另ARMV6以上的架构使用了 LDREX和STREX指令来实现对某个内存地址的独占访问,从而避免了对中断的禁止操作。(这块从指令的解释上看猜测是这样的,没有太多了解)

• LDREX{} , []
This performs a load, then sets a monitor to “watch” the address
• STREX {} , , []
This performs a store and returns “success” in Rd if no intervening access
detected by the monitor.

阅读(1182) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~