长沙 建站优化,花都区手机版网站建设,wordpress 显示名,如何把网站放在主机上Singleton 三要素#xff1a;private 构造函数、 public 静态方法、 public 静态变量 单实例模式的三种线程安全实现方式#xff08;#xff23;#xff0b;#xff0b;#xff09; #xff11; 懒汉模式#xff1a;即第一次调用该类实例的时候才产生一个新的该类实例…Singleton 三要素private 构造函数、 public 静态方法、 public 静态变量 单实例模式的三种线程安全实现方式 懒汉模式即第一次调用该类实例的时候才产生一个新的该类实例并在以后仅返回此实例。 需要用锁来保证其线程安全性原因多个线程可能进入判断是否已经存在实例的if语句从而non thread safety. 使用double-check来保证thread safety.但是如果处理大量数据时该锁才成为严重的性能瓶颈。 class Singleton
{private :static Singleton * m_instance;Singleton(){}public :static Singleton *getInstance();
};
Singleleton * Singleton::getInstance()
{if(NULL m_instance){Lock();//借用其他类来实现如boostif(NULL m_instance){m_instacne new Singleton();}UnLock();}return m_instance;} 内部静态实例的懒汉模式 这里需要注意的是C0X以后要求编译器保证内部静态变量的线程安全性可以不加锁。但C 0X以前仍需要加锁。 class Singleton
{private ://static Singleton * m_instance;Singleton(){}public :static Singleton *getInstance(){Lock();static Singleton instance;UnLock();return instance;}
}; 饿汉模式即无论是否调用该类的实例在程序开始时就会产生一个该类的实例并在以后仅返回此实例。个人比较喜欢此方法 由静态初始化实例保证其线程安全性WHY因为静态实例初始化在程序开始时进入主函数之前就由主线程以单线程方式完成了初始化不必担心多线程问题。 故在性能需求较高时应使用这种模式避免频繁的锁争夺。 class Singleton
{private :static const Singleton * m_instance;Singleton(){}public :static Singleton *getInstance(){return m_instance;}
};
const Singleton * Singleton::m_instance new Singleton(); reference :http://www.cnblogs.com/ccdev/archive/2012/12/19/2825355.html转载于:https://www.cnblogs.com/graph/p/3224449.html