现在的位置: 首页 > 综合 > 正文

<转>理解自旋锁(spin lock)

2014年08月17日 ⁄ 综合 ⁄ 共 461字 ⁄ 字号 评论关闭

线程被阻塞后便进入内核(Linux)调度状态,这个会导致系统在用户态与内核态之间来回切换,严重影响锁的性能。自旋锁的出现就是为了尽可能的避免线程阻塞。其原理是:当发生争用时,若Owner线程能在很短的时间内释放锁,则那些正在争用线程可以稍微等一等(自旋), 在Owner线程释放锁后,争用线程可能会立即得到锁,从而避免了系统阻塞。但Owner运行的时间可能会超出了临界值,争用线程自旋一段时间后还是无法获得锁,这时争用线程则会停止自旋进入阻塞状态(后退)。基本思路就是自旋,不成功再阻塞,尽量降低阻塞的可能性,这对那些执行时间很短的代码块来说有非
常重要的性能提高。 


线程自旋时做些啥?其实啥都不做,可以执行几次for循环,可以执行几条空的汇编指令,目的是占着CPU不放,等待获取锁的机 会。所以说,自旋是
双刃剑,如果旋的时间过长会影响整体性能,时间过短又达不到延迟阻塞的目的。显然,自旋的周期选择显得非常重要,但这与操作系统、硬件体系、系 
统的负载等诸多场景相关,很难选择,如果选择不当,不但性能得不到提高,可能还会下降。 
【上篇】
【下篇】

抱歉!评论已关闭.