这样的单件模式是线程安全的吗?
在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);}