设计模式C++实现(4)——单例模式

时间:2025-03-25 20:57:29
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;

这个应该能解决多线程单例安全问题