Double Checked Locking 模式

简介:
之前在使用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;
}
**解决上述问题——双检锁模式。
目录
相关文章
|
3月前
|
JavaScript 前端开发 数据库
input中的disabled 和 readonly的区别
input中的disabled 和 readonly的区别
180 0
|
8月前
Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified
Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified
124 0
|
8月前
|
JavaScript
[Vue warn]_ Avoid using non-primitive value as key, use string_number value instea
[Vue warn]_ Avoid using non-primitive value as key, use string_number value instea
97 1
disabled与readonly的区别
disabled与readonly的区别
71 0
解决办法:Type safety: The expression of type List needs unchecked conversion to conform
解决办法:Type safety: The expression of type List needs unchecked conversion to conform
352 0
|
弹性计算 关系型数据库 数据库连接
PostgreSQL 12 preview - Move max_wal_senders out of max_connections for connection slot handling
标签 PostgreSQL , max_wal_senders , max_connections , sorry, too many clients already 背景 如果你需要使用PG的流复制,上游节点的max_wal_senders参数,用来限制这个节点同时最多可以有多少个wal sender进程。 包括逻辑复制、物理复制、pg_basebackup备份等,只要是使用stre
380 0

热门文章

最新文章