最简单的单根模式的实现:
//only suit for single-thread mode
class Singleton
{
public:
static Singleton& Instance()
{
static Singleton theSingleton;
return theSingleton;
}
/* more (non-static) functions here */
private:
Singleton();
Singleton(Singleton const&);
Singleton& operator=(Singleton const&);
~Singleton();
};
在Singleton & Instance()函数的实现中加入一个全局的静态locker可以实现线程安全的singleton.
class Singleton
{
public:
static Singleton& Instance()
{
//try to locker
//some_locker.lock();
static Singleton theSingleton;
return theSingleton;
}
/* more (non-static) functions here */
private:
Singleton();
Singleton(Singleton const&);
Singleton& operator=(Singleton const&);
~Singleton();
//static locker some_locker;
};
为了避免每次都调用locker,可以使用double checker的机制来改善。
关于double checker参见如下做法:
T* T::instance()
{
if (smInstance == NULL)
{
VMutexLocker lock(&smMutex);
if (smInstance == NULL) // double-check
smInstance = new T();
}
return smInstance;
}
注:为了避免内存泄漏,我们在实际中用了静态变量的引用的实现来实做singleton,而没有使用指针的实现。
1579

被折叠的 条评论
为什么被折叠?



