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时都会产生缓存缺失,都会从主存中去重新加载,这会导致一阵的总线风暴。
  • 相关阅读:
    9 jmeter之检查点
    8 jmeter之集合点
    7 jmeter之参数化
    6 jmeter元件的作用域与执行顺序
    5 jmeter性能测试小小的实战
    4 jmeter badboy脚本开发技术详解
    3 jmeter的两种录制方法
    2 jmeter常用功能介绍-测试计划、线程组
    Errors occurred during the build. Errors running builder 'DeploymentBuilder' on project
    常见异常总结
  • 原文地址:https://www.cnblogs.com/WeRtogether/p/4487972.html
Copyright © 2011-2022 走看看