我写了一个单例类,使用了双重检查锁定的方法,确保只有一个类实例生成。
其中我使用mutex,从而实现锁定方法。
(单纯的替换mutex->spinlock好像会报编译错误。
另外,顺便问下,把mutex换成spinlock在Singleton模式下会有比较大的性能提升么?(目测不会。。。= =。。
我的代码如下:
#ifndef SINGLETON#define SINGLETONclass CSingleton{public: static CSingleton* getInstance() { if(!uniqueInstance) { pthread_mutex_lock(&mutex); if(!uniqueInstance) { uniqueInstance = new CSingleton(); } pthread_mutex_unlock(&mutex); } return uniqueInstance; } void fill(int x){ val += x; } int getVal(){ return val; }private: int val; CSingleton() { val = 0; } CSingleton(const CSingleton&){} CSingleton & operator = (const CSingleton&); static CSingleton * uniqueInstance; static pthread_mutex_t mutex; }; CSingleton * CSingleton::uniqueInstance = NULL;pthread_mutex_t CSingleton::mutex = PTHREAD_MUTEX_INITIALIZER;#endif