• Double Checked Locking 模式


    转自:http://blog.csdn.net/wwsoon/article/details/1485886

    之前在使用Double Check Locking 模式时,发现自己还是不太理解。于是写个记录,其实很简单,一看就明白了。
    应用特别说明:
    1.Double Check Locking模式是singleton的多线程版本,如果是单线程则应使用singleton。
    2.Double Check Locking模式依就会使用锁——临界区锁定,不要以为可以避免使用锁。
    3.Double Check Locking 解决的问题是:当多个线程存在访问临界区企图时,保证了临界区只需要访问一次。
    下面是其适用特点:
    1.多个线程试图并发访问一个临界区;
    2.临界区只需执行一次;
    分析如下3种方法:
    //class singleton
    //:s1-
    singleton* get_instance(void)
    {
        lock();
        if( instance == 0) {
           instance = new singleton;
        }
        unlock();
        return instance;
    }
    **存在的问题是:无论是否已经初始化都要加锁,增加了负荷,已经没有所谓的并发性能了。
    //:s-2
    singleton* get_instance(void)

        if( instance == 0){
            lock();
            instance = new singleton;
            unlock();
        }
        return instance;
    }
    **存在的问题是:不能保证临界区只初始化一次,没能实现singleton的基本功能;
    //:s-3
    singleton* get_instance(void)

        if( instance == 0){
            lock();
            if( instance == 0 )
                instance = new singleton;
            unlock();
        }
        return instance;
    }
    **解决路上述问题——双检锁模式。

  • 相关阅读:
    hdu 2594 Simpsons’ Hidden Talents
    hdu 1358 Period
    hdu 3746 Cyclic Nacklace
    理解KMP算法
    ural 1039 Anniversary Party
    ural 1018 Binary Apple Tree
    RowDataBound事件
    aspxGridview 根据单元格值得不同,设置单元格字体的颜色(设置和读取值)
    Asp.Net中GridView加入鼠标滑过的高亮效果和单击行颜色改变
    GridView的行颜色高亮显示(包括满足条件的行)
  • 原文地址:https://www.cnblogs.com/wq3435/p/6124043.html
Copyright © 2020-2023  润新知