C++单例模式

 1 /*
 2 之所以在Instantialize函数里面对pInstance 是否为空做了两次判断,因为该方法调用一次就产生了对象,pInstance == NULL 大部分情况下都为false,如果按照原来的方法,每次获取实例都需要加锁,效率太低。
 3 而改进的方法只需要在第一次调用的时候加锁,可大大提高效率。
 4 
 5 第二重NULL == instance作用:
 6 如果同时又两个线程调用getInstance()时,都可以通过第一重NULL == instance,由于lock机制,
 7 只有一个线程进入,另一个在外等候,只有等第一个线程进入并出来后,第二个线程才能进入。如果
 8 没有第二重NULL == instance,第一个线程创建实例后第二个线程还是可以创建实例
 9  */
10 class Singleton
11 {
12 private:
13     static Singleton* instance;
14     Singleton(){}
15 public:
16     static Singleton* getInstance()
17     {
18         if(NULL == instance)
19         {
20             Lock();//借用其它类来实现,如boost
21             if(NULL == instance)
22             {
23                 instance = new Singleton();
24             }
25             UnLock();
26         }
27     return instance;
28     }
29 }

 

posted @ 2015-07-07 16:01  huzj  阅读(118)  评论(0编辑  收藏  举报