zoukankan      html  css  js  c++  java
  • TASLock TTASLock

    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时都会产生缓存缺失,都会从主存中去重新加载,这会导致一阵的总线风暴。
  • 相关阅读:
    js对象方法
    重要的小知识点
    vs2017引用vue组件中文乱码
    单行文本溢出打点、多行文本溢出打点
    span和input布局时对不齐
    在思科三层交换机上配置DHCP,不同网段/VLAN间互通
    搭建ssm整合
    使用Redis
    MyBatis常用实现方式
    Java 面向对象
  • 原文地址:https://www.cnblogs.com/WeRtogether/p/4487972.html
Copyright © 2011-2022 走看看