Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2160979
  • 博文数量: 374
  • 博客积分: 7276
  • 博客等级: 少将
  • 技术积分: 5669
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-06 16:35
文章分类

全部博文(374)

文章存档

2013年(23)

2012年(153)

2011年(198)

分类: LINUX

2011-10-10 13:57:51

关于整数 的原子操作,对于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.

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