码迷,mamicode.com
首页 > 其他好文 > 详细

Double Checked Locking 模式

时间:2016-12-02 02:56:07      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:ret   使用   lock   double   blog   art   理解   基本功   存在   

转自: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;
}
**解决路上述问题——双检锁模式。

Double Checked Locking 模式

标签:ret   使用   lock   double   blog   art   理解   基本功   存在   

原文地址:http://www.cnblogs.com/wq3435/p/6124043.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!