C++ 单例模式,

C++ 单例模式是与工厂模式相对应的, 也是设计模式中最常用的一种模式, 主要面向工具类,基本不用存储太多的跟自身有关的数据,在这种情况下,每次都去new一个对象,即增加了开销,也使得代码更加复杂,如果使用全局的存储,会影响封装性,而我们又期待可以只有一个实例使用,将默认构造函数与析构函数 声明为私有的,这样就不会被外部创建对象, 并且,也可以自己回收,


Singleton* getInstance()
{
    if (instance == NULL)
        instance = new Singleton();
 
    return instance;
}
在单线程中,这样是可以的。但是在多线程的环境下却不行了,因为很可能两个线程同时运行到if (instance == NULL)这一句,导致可能会产生两个实例。于是就要在代码中加锁。


Singleton* getInstance()
{
    Lock()
    if (instance == NULL)
        instance = new Singleton();
    Unlock()
    return instance;
}

这样每次都会判断是否加锁, 会造成性能的下降, 线程的阻塞严重,

可以通过双重加锁

Singleton* getInstance()
{
    if (instance == NULL) {
        Lock()
         if  (instance == NULL)
             instance =  new  Singleton();
        Unlock()
    } 
     return  instance;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值