这样的单件模式是线程安全的吗?
在vs2008下编译.
以下的代码是线程安全的吗?
#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);
}