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 }