Double-Check Locking

多线程安全的单例模式:

 

CSingletion*CSingletion::ms_Instance=NULL;

CSingletion *CSingleton::GetInstatce()

{

      if(ms_Instance==NULL)

      {

             Lock();

             if(ms_Instance==NULL)

            {

                 ms_Instance=new CSingletion();

            }

             Unlock();

      }

      return ms_Instance;

}

 

Lock()下的第二个if是必要的,考虑当第一次调用时,第一个if成立,加锁后,第二个if也成立,开始准备执行new,这是第二次调用开始,由于new还没做,因此第二次调用也能够通过第一个if,然后被lock住。这是第一次调用运行完new并且unlock,这时如果没有第二个if,第二次调用同样会运行new导致第二次实例化对象。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值