几种锁算法的实现
2018-07-20 来源:open-open
Abstract
4种Lock的实现:
- TASLock
- TTASLock
- CLHLock
- MCSLock
TASLock
每一个Lock带有一个状态位,lock()与unlock()操作原子的改变状态位。false时可进入,true时spin。
public class TASLock implements Lock { AtomicBoolean state = new AtomicBoolean(false); public void lock() { while(state.getAndSet(true)) {} } public void unlock() { state.set(false); } }
defect:
-
在锁被其他线程持有的情况下,
while(state.getAndSet(true))
会不停的将state从true改为true
TTASLock
TASLock算法的改进。
public class TTASLock implements Lock() { AtomicBoolean state = new AtomicBoolean(false); public void lock() { while (true) { while (state.get()) {}; if (! state.getAndSet(true)) return; } } public void unlock() { state.set(false); } }
-
while (state.get()){}
是一个改进,效果是先看一眼lock的状态,当lock是false时,
再真正的执行state.getAndSet(true)
。 - 当state.getAndSet(true) 的return为false时,说明之前的确是false,于是获得锁,return。
否则回到while(true),再次尝试获得锁。
defect:
- 在unlock时,state.set(false)还是会带来大量的cache miss。
-
cache miss VS cache hit
CLHLock
队列锁。
CLHLock标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。
上一篇:php加密解密处理类
下一篇:Python异步任务队列
最新资讯
热门推荐