lock-free&wait-free
来源:互联网 发布:u盘安装linux系统教程 编辑:程序博客网 时间:2024/05/20 18:20
1.概念定义:
https://en.wikipedia.org/wiki/Non-blocking_algorithm
2.我的理解:
lock-free:需要取得锁的线程在有限步骤或时间内内就可以成功(多数线程都会成功,一些可能失败,比wait-free语义稍弱)
wait-free:需要取得锁的线程在有限步骤或时间内内就可以成功(任意线程都会成功,语义更加强烈)
3.例子(引用):
do { pred = tail;} while(!tail.compareAndSet(pred, node));这部分代码就是lock-free的,分析如下:
假如多个线程(T1,T2)同时执行这段代码,无论T1和T2谁先执行,或者同时执行,最后都会成功。但是这似乎很明显,不能凸显lock-free的特征。但是如果T1在执行过程中发生了睡眠或挂起,那么T2到底是跟着block还是继续执行呢?这一点就是lock-free和mutex lock的区别,在mutex lock中,如果T1在获得锁之后发生挂起,那么T2也会跟着被block。但是在lock-free中,即使T1发生了挂起,T2还是会继续执行。
(内在原因:compareAndSet是硬件指令实现的,硬件的指令都是原子级别的,即在执行这个指令的过程中,不能被系统中断,没有所谓的执行到指令的一半时发生挂起,如此保证了lock-free中即使T1挂起,T2还是会执行。但是在mutex lock中,在T1获得锁之后是可以睡眠的,如
lock(T1);
do something; //此时发生挂起
这时T2就会被block。
)
4.参考文献:
1)http://gee.cs.oswego.edu/dl/papers/aqs.pdf
2)https://en.wikipedia.org/wiki/Non-blocking_algorithm
- lock-free&wait-free
- Lock-free VS wait-free
- wait-free 和 lock-free 资料收集
- Lock-free vs. wait-free concurrency
- lock-free/wait-free算法以及ABA问题
- Lock-Free
- Lock-Free
- Lock-free论文集
- lock free 编程
- Lock-Free Algorithms
- linux内核 lock free
- Lock Free Stack
- Lock-Free的理解
- Lock-Free Data Structures
- lock free 之 stack
- 《Implementing Lock-Free Queues》
- Lock-Free Data Structures
- lock free编程思想
- 调用ffmpeg库生成AAC静音帧packet
- 字符逆序
- 排序与查找实例(三):快速排序
- Unsupported major.minor version 52.0
- 前_Fri Jun 16 00:00:00 CST 2017_转换后2017/6/13 15:36:39_IllegalArgumentException
- lock-free&wait-free
- 模拟和仿真的区别
- 结合个人经历总结的前端入门方法(这才是真的入门经典)
- Spring-Cloud系列第5篇:spring-cloud-config-eureka-ribbon
- Git的理解学习笔记。
- JS之function2(对象属性方法作用域)
- 單例模式(懶漢式,餓漢式)
- oauth2添加get请求方式获取token
- linux特殊符号大全