锁机制

在硬件层面,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 这两条指令是独占的内存读、写指令。

 

posted @ 2016-06-12 13:08  瘸腿  阅读(326)  评论(0编辑  收藏  举报