不迎不送,来去自便,无茶无酒,谈笑随缘

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

多线程安全的单例模式:

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导致第二次实例化对象。

posted on 2009-12-14 11:56  wude  阅读(196)  评论(0编辑  收藏  举报