不做赘述, 单例模式想必大家已经烂熟于心了.
这里提一下多线程如何保证的单例模式的线程安全.
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判断不加锁, 内部又有一层if判断, 这个判断加锁, 只要有了第一次的创建, 后续的创建都不需要走到内部, 于是性能没有降低很多.
C++11中还有std::once的方法, 保证创建只会被执行一次, 也可以做到线程安全.
网友评论