问题来源于某面试题:
编写一个单例模式的类。
#include<iostream> #include<cstdio> #include<cstdlib> using namespace std; class singleStance{ private : singleStance(); public : static singleStance* onlystance; static singleStance* getStance(){ if(!onlystance){ onlystance = new singleStance(); } return onlystance; } }; int main(){ return 0; }
事实上这样已经完成了单例模式的目标。
但是事实上也只会在单线程模式下起作用。
试想,如果多线程下同时进入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); } };