自旋锁
来源:互联网 发布:青山长源软件 编辑:程序博客网 时间:2024/05/16 11:45
自旋锁:
自旋锁最多只能被一个可执行单元持有,自旋锁不会引起调用者睡眠,
如果一个执行线程试图获得一个已经被持有的自旋锁,那么线程就会一直进行忙碌环,一直等待下去,
在那里看是否该自旋锁的保持者已经释放了锁,“ 自旋 ” 就是这个意思.
初始化自旋锁 spin_lock_init ( x ):
spin_lock_init ( x )
该宏用于 初始化自旋锁 x,自旋锁在使用前必须先初始化.
获取自旋锁 spin_lock( lock ) spin_trylock( lock ) :
spin_lock ( lock )
获取自旋锁 lock ,如果成功,立即获得锁,并马上返回,否则它将一直自旋在那里,直到该自旋锁的
保持者释放.
spin_trylock ( lock )
试图获取自旋锁 lock ,如果能立即获得锁,并返回真,
否则立即返回假, 它不会一直等待被释放.
释放自旋锁 spin_unlock ( lock ):
spin_unlock ( lock )
释放自旋锁 lock ,它与 spin_trylock 或 spin_lock 配对使用.
信号量 PK 自旋锁:
1,信号量可能允许多个持有者,而自旋锁在任何时候只能允许一个持有者.
当然也有信号量叫互斥信号量 ( 只能有一个持有者 ),允许有多个持有者的信号量叫计数信号量.
2,信号量适合于保持时间长的情况;而自旋锁适合于保持时间非常短的情况.
在实际应用中,自旋锁控制的代码只有几行,而持有自旋锁的时间也一般不会超过两次上下文
切换的时间,因为线程一旦要进行切换,就至少花费切出切入两次,自旋锁的占用时间如果远
远长于两次上下文切换 ,我们就应该选择信号量.
- 自旋锁
- 自旋锁
- 自旋锁
- 自旋锁
- 自旋锁
- 自旋锁
- 自旋锁
- 自旋锁
- 自旋锁
- 自旋锁
- 自旋锁
- 自旋锁
- 自旋锁
- 自旋锁
- 自旋锁
- 自旋锁
- 自旋锁
- 自旋锁
- Why does the compiler generate a MOV EDI, EDI instruction at the beginning of functions?
- 计算机二进制数值表示为何出现原码反码补码三种方式? and 如何计算?
- Vue2.0+ElementUI+PageHelper实现的表格分页
- iOS程序中的内存分配 栈区 堆区 全局区(静态区) 常量区 方法区
- 系统虚拟机管理
- 自旋锁
- Python引用多个模块,调用模块中的函数时,要注意的地方
- 蓝牙协议分析——BLE连接有关的技术分析
- AtomicInteger 学习
- Delphi XE7,C++ Builder XE7,RAD Studio XE7 v21.0.17017.3725(With Update 1) 官方下载激活
- tpshop开源商城怎么样
- git大小写敏感
- day75_babaSport第一天
- SpringBoot的DeferredResult实例:一、理解Spring的Callable 和DeferredResult