几种锁算法的实现
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异步任务队列
最新资讯
热门推荐