首页 > 其他 > 详细

TASLock TTASLock

时间:2015-05-08 16:20:47      阅读:408      评论:0      收藏:0      [点我收藏+]

http://my.oschina.net/clopopo/blog/140479

 

public class TASLock { 
   private AtomicBoolean state = new AtomicBoolean(false);
   publicvoidlock() { 
      while (state.getAndSet(true)) {} 
   }
   public void unlock() {
       state.set(false);
   } 
}
 
public class TTASLock {
    private AtomicBoolean state = new AtomicBoolean(false);
     // 加锁
    public void lock() {
        while (true) {
            while (state.get()) {
                // 自旋
            }
            if (!state.getAndSet(true)) {
                break;
            }
        }
    }
    public void unlock() {
        state.set(false);
    }
}
 
AtomicBoolean是布尔值的一个原子类型实现类。原子类型的方法是线程安全的。
 
TASLock :自旋测试(getandset)每次都会去设置state值,导致其他线程的本地缓存无效。每次都会产生缓存缺失。大量的缓存缺失又会导致总线资源被严重的占用(每次都得从主存中加载值)。
 
当然TTASLock也不是完美的加锁方案。因为TTASLock在解锁的时候,会导致其他线程本地缓存中state值无效。所有的线程再次执行get时都会产生缓存缺失,都会从主存中去重新加载,这会导致一阵的总线风暴。

TASLock TTASLock

原文:http://www.cnblogs.com/WeRtogether/p/4487972.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!