1.5 单例模式

不做赘述, 单例模式想必大家已经烂熟于心了.

这里提一下多线程如何保证的单例模式的线程安全.

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的方法, 保证创建只会被执行一次, 也可以做到线程安全.

你可能感兴趣的:(1.5 单例模式)