分类: 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.