lock-free&wait-free
2017-06-16 10:36
459 查看
1.概念定义:
https://en.wikipedia.org/wiki/Non-blocking_algorithm
2.我的理解:
lock-free:需要取得锁的线程在有限步骤或时间内内就可以成功(多数线程都会成功,一些可能失败,比wait-free语义稍弱)
wait-free:需要取得锁的线程在有限步骤或时间内内就可以成功(任意线程都会成功,语义更加强烈)
3.例子(引用):
假如多个线程(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
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
相关文章推荐
- Algorithms & Data structures in C++& GO ( Lock Free Queue)
- <c plus plus concurrency in action>第七章 lock_free 解析 count reference queue
- lock-free/wait-free算法以及ABA问题
- wait-free 和 lock-free 资料收集
- MySQL Q&A : Lock wait timeout exceeded; try restarting transaction
- Lock-free VS wait-free
- C# 多线程中的lock,Monitor.pulse(all)&wait
- C# 多线程中的lock,Monitor.pulse(all)&wait
- C# 多线程中的lock,Monitor.pulse(all)&wait
- Lock-free vs. wait-free concurrency
- C# 多线程中的lock,Monitor.pulse(all)&wait
- To Register a Free Premium Account in Rapidshare Download & Install this
- Java多线程——Lock&Condition
- swing线程机制&invokeLater&invokeAndWait
- Android 4.2.2 LockScreen&Keyguard 锁屏分析
- Online Casino Malaysia Free Credit iBET Birthday Bonus RM 38, RM 88 & RM 128(Birthday Bonus, iBET, O
- 无锁的 ( lock-free ) 线程安全算法
- vmware:Cannot open the disk 'XXX' or one of the snapshot disks it depends on. reason: failed to lock
- 生产者与消费者 & wait()& notify()
- oracle11g RAC GI ORA-15003: diskgroup "XXXX" already mounted in another lock name space