理解自旋锁(spin lock)
来源:互联网 发布:圣诞节 知乎 编辑:程序博客网 时间:2024/06/05 03:22
线程被阻塞后便进入内核(Linux)调度状态,这个会导致系统在用户态与内核态之间来回切换,严重影响锁的性能。自旋锁的出现就是为了尽可能的避免线程阻塞。其原理是:当发生争用时,若Owner线程能在很短的时间内释放锁,则那些正在争用线程可以稍微等一等(自旋), 在Owner线程释放锁后,争用线程可能会立即得到锁,从而避免了系统阻塞。但Owner运行的时间可能会超出了临界值,争用线程自旋一段时间后还是无法获得锁,这时争用线程则会停止自旋进入阻塞状态(后退)。基本思路就是自旋,不成功再阻塞,尽量降低阻塞的可能性,这对那些执行时间很短的代码块来说有非 常重要的性能提高。
线程自旋时做些啥?其实啥都不做,可以执行几次for循环,可以执行几条空的汇编指令,目的是占着CPU不放,等待获取锁的机 会。
所以说,自旋是把双刃剑,如果旋的时间过长会影响整体性能,时间过短又达不到延迟阻塞的目的。显然,自旋的周期选择显得非常重要,但这与操作系统、硬件体系、系 统的负载等诸多场景相关,很难选择,如果选择不当,不但性能得不到提高,可能还会下降。
阅读全文
0 0
- 理解自旋锁(spin lock)
- <转>理解自旋锁(spin lock)
- 自旋锁 Spin Lock
- 自旋锁(Spin Lock)
- 自旋锁SPIN LOCK的编程实现
- 自旋锁(spin lock) API
- Java线程 - CAS自旋锁(spin-lock)
- 自旋锁(spin lock)与互斥量(mutex)的比较
- 自旋锁(spin lock)与互斥量的区别
- 一个关于自旋锁(spin lock)问题的讨论
- spin lock 深入理解
- 自旋锁(spin lock)与互斥量(mutex)的比较——多核编程学习笔记2
- spin lock
- spin lock
- spin lock
- spin lock
- spin lock
- spin lock
- 反射实现
- 【Java并发之】BlockingQueue
- 十种深蹲技巧
- oozie整理
- Prime Matrix CodeForces
- 理解自旋锁(spin lock)
- Spark SQL性能优化
- 初识Velocity
- TCP协议的三次握手和四次挥手
- 数列特征方程
- ARM下的位置无关和相关码
- 第一个博客,记录一下学习的东西吧。
- Arrays 类如何使用,数组的复制,数组排序,数组增加删除,变换位置
- CSUOJ-1980: 不堪重负的树(区间DP)