标签:
在硬件层面,CPU提供了原子操作、关中断、锁内存总线的机制;所以可以基于这几个机制在不同的层面实现不同的锁。
原子操作,锁内存总线在R3可以实现应用程序内的锁。在R0实现锁需要考虑到中断的情况。
intel 提供了lock锁内存访问总线和 cmpxchg这两样东西来供我们实现底层的锁机制,然后在这个基础上,可以有各种花样可以玩了,比如信号量之类的。
intel cpu 相关原子操作可以参考: 关于单CPU,多CPU上的原子操作
前面一两年许多人在讨论lock free算法,什么CAS啦,我当时不明白什么lock free , 觉得不可能有这种东西,不用CPU提供的这些基础指令,怎么可能实现线程安全的程序,那个时候我不知道他们也会用到 LOCK 修饰 和 cmpxchg这种最基础的指令,以为自己又在什么地方out了,现在回头看,这些人搞来搞去,还是这些东西。觉得他们所谓的lock-free 其实就是指
1.程序不用切换到Ring0去获取某个锁对象,
2.这个增减操作在Ring3 一步原子完成(废话)。
用lock,cmpxchg这些指令实现锁 可以参考 用汇编实现原子操作 这篇文章。
ARM平台实现锁也差不多,提供的机制都是类似的。LDREX ,STREX 这两条指令是独占的内存读、写指令。
标签:
原文地址:http://www.cnblogs.com/hi0xcc/p/5576329.html