Single-mode multithreading support can be divided into two categories.
1, lazy mode
C++11 requires the compiler to guarantee the thread safety of internal static variables without locking. But c++11 before, still need to add lock.
Lock/unlock can adopt the technology of boost.
Class Csingleton
{
private:
Csingleton () {} public
:
static csingleton* getinstance ()
{
Lock ();//not needed after c++11
static Csingleton instance;
UnLock (); Not needed after c++11 return
&instance;
}
};
2, a hungry man mode
The static initialization instance guarantees its thread security, which avoids lock contention, but the bad part is that it can be created even if no instance is used.
Class Csingleton
{
private:
static Csingleton m_instance;
Csingleton () {} public
:
static csingleton* getinstance () {return &m_instance;}
};
External initialization of
Csingleton csingleton::m_instance;