<转>理解自旋锁(spin lock)
来源:互联网 发布:windows网络抓包工具 编辑:程序博客网 时间:2024/06/05 03:01
线程被阻塞后便进入内核(Linux)调度状态,这个会导致系统在用户态与内核态之间来回切换,严重影响锁的性能。自旋锁的出现就是为了尽可能的避免线程阻塞。其原理是:当发生争用时,若Owner线程能在很短的时间内释放锁,则那些正在争用线程可以稍微等一等(自旋), 在Owner线程释放锁后,争用线程可能会立即得到锁,从而避免了系统阻塞。但Owner运行的时间可能会超出了临界值,争用线程自旋一段时间后还是无法获得锁,这时争用线程则会停止自旋进入阻塞状态(后退)。基本思路就是自旋,不成功再阻塞,尽量降低阻塞的可能性,这对那些执行时间很短的代码块来说有非 常重要的性能提高。
线程自旋时做些啥?其实啥都不做,可以执行几次for循环,可以执行几条空的汇编指令,目的是占着CPU不放,等待获取锁的机 会。所以说,自旋是
把
双刃剑,如果旋的时间过长会影响整体性能,时间过短又达不到延迟阻塞的目的。显然,自旋的周期选择显得非常重要,但这与操作系统、硬件体系、系
统的负载等诸多场景相关,很难选择,如果选择不当,不但性能得不到提高,可能还会下降。
- <转>理解自旋锁(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
- 编写 iRule
- [go语言]slice和map
- LA3029最大子矩阵,city Games(求矩阵中最大空格子矩阵,扫描法)
- zoj-1057
- 其它Monitor 注意事项
- <转>理解自旋锁(spin lock)
- Android界面与交互设计原则
- 禁用的Tcl 命令
- OpenAL学习笔记(一)---播放音频(*.wav)
- [go语言]控制语句
- Android Camera CameraHal.cpp 分析
- 韩顺平 PHP视频教程 Ajax技术第05讲-返回XML如何处理
- <转>Linux查看进程的所有子进程和线程
- ClistCtr HDN_BEGINTRACK这个WM_NOTIFY消息