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 }