这样的单件模式是线程安全的吗?该怎么解决
这样的单件模式是线程安全的吗?
在vs2008下编译.
以下的代码是线程安全的吗?
------解决方案--------------------
当然不是线程安全的,而是直接彻底错误的。
因为全局对象的构造里可以创线程,而这时还没执行到main呢。
------解决方案--------------------
参考拙作:
C++实现Singleton模式
有非常详细的说明。
------解决方案--------------------
static T& Instance()
{
static T& sg = MakeInstance();
return sg;
}
这个,每次都去实例化一个阿^
------解决方案--------------------
有一种单件叫线程单件,就是每个线程有一份自己的拷贝。
在vs2008下编译.
以下的代码是线程安全的吗?
- C/C++ code
#include<windows.h> #include <iostream> using namespace std; CRITICAL_SECTION g_cs; template<typename T> class Singleton { public: static T& Instance() { static T& sg = MakeInstance(); return sg; } protected: static T& MakeInstance() { EnterCriticalSection(&g_cs); static T& sg = T(); LeaveCriticalSection(&g_cs); return sg; } Singleton() {} Singleton(const Singleton&){} ~Singleton(){} }; class SingleA: public Singleton<SingleA> //一个具体的单件类. { friend Singleton; SingleA() { cout<<"Hello SingleA"<<endl; } }; int main() { InitializeCriticalSection(&g_cs); SingleA& s1=SingleA::Instance(); SingleA& s2=SingleA::Instance(); DeleteCriticalSection(&g_cs); }
------解决方案--------------------
当然不是线程安全的,而是直接彻底错误的。
因为全局对象的构造里可以创线程,而这时还没执行到main呢。
------解决方案--------------------
参考拙作:
C++实现Singleton模式
有非常详细的说明。
------解决方案--------------------
static T& Instance()
{
static T& sg = MakeInstance();
return sg;
}
这个,每次都去实例化一个阿^
------解决方案--------------------
有一种单件叫线程单件,就是每个线程有一份自己的拷贝。