不做贅述, 單例模式想必大家已經(jīng)爛熟于心了.
這里提一下多線程如何保證的單例模式的線程安全.
Singleton* Singleton::getInstance()
{
if(m_singleton == NULL)
{
m_lock.Lock();
if(m_singleton ==NULL)
m_singleton = new Singleton();
m_lock.Unlock();
}
return m_singleton;
}
外部的if判斷不加鎖, 內(nèi)部又有一層if判斷, 這個判斷加鎖, 只要有了第一次的創(chuàng)建, 后續(xù)的創(chuàng)建都不需要走到內(nèi)部, 于是性能沒有降低很多.
C++11中還有std::once的方法, 保證創(chuàng)建只會被執(zhí)行一次, 也可以做到線程安全.