class CLock
{
public:
CLock()
{
InitializeCriticalSection(&m_cs);
}
~CLock()
{
DeleteCriticalSection(&m_cs);
}
void Lock()
{
EnterCriticalSection(&m_cs);
}
void Unlock()
{
LeaveCriticalSection(&m_cs);
}
private:
CRITICAL_SECTION m_cs;
};
class AutoLock{
private:
CLock &m_cs;
public :
AutoLock(CLock& cs);
~AutoLock() {m_cs.Unlock();}
};
AutoLock::AutoLock(CLock& cs):m_cs(cs)
{
m_cs.Lock();
}
class Single{
public:
static CLock s_cs;
private:
static Single* s_stance;
public:
static Single* GetInstance()
{
if (NULL == s_stance)
{
AutoLock lock(s_cs);
if (NULL == s_stance)
{
s_stance=new Single();
}
}
return s_stance;
}
};
Single* Single::s_stance = NULL;
CLock Single::s_cs;
这个应该能解决多线程单例安全问题