如果多线程下同时进入if(!onlystance)就有可能出现错误。所以显然是需要加入互斥锁的。
class singleStance{
private :
singleStance();
public :
static singleStance* onlystance;
static singleStance* getStance(){
lockBase* lockbase = new lockBase();
lockBase->lock();
if(onlystance){
onlystance = new singleStance();
}
lockBase->unlock();
return onlystance;
}
};
class lockBase{
protected:
friend class singleStance;
CRITICAL_SECTION cs;
public :
lockBase()
{
::InitializeCriticalSection(&cs);
}
void lock()
{
::EnterCriticalSection(&cs);
}
void unlock()
{
::LeaveCriticalSection(&cs);
}
~lockBase(){
::DeleteCriticalSection(&cs);
}
};