C++线程安全的单例模式

发表于:2015-7-31 09:38

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:starof    来源:51Testing软件测试网采编

  废话不多说,常用的代码积淀下来。
  一、懒汉模式:即第一次调用该类实例的时候才产生一个新的该类实例,并在以后仅返回此实例。
  需要用锁,来保证其线程安全性:原因:多个线程可能进入判断是否已经存在实例的if语句,从而non thread safety.
  使用double-check来保证thread safety.但是如果处理大量数据时,该锁才成为严重的性能瓶颈。
  1、静态成员实例的懒汉模式:
1 class Singleton
2 {
3 private:
4     static Singleton* m_instance;
5     Singleton(){}
6 public:
7     static Singleton* getInstance();
8 };
9
10 Singleton* Singleton::getInstance()
11 {
12     if(NULL == m_instance)
13     {
14         Lock();//借用其它类来实现,如boost
15         if(NULL == m_instance)
16         {
17             m_instance = new Singleton;
18         }
19         UnLock();
20     }
21     return m_instance;
22 }
  2、内部静态实例的懒汉模式
  这里需要注意的是,C++0X以后,要求编译器保证内部静态变量的线程安全性,可以不加锁。但C++ 0X以前,仍需要加锁。
  1 class SingletonInside
  2 {
  3 private:
  4     SingletonInside(){}
  5 public:
  6     static SingletonInside* getInstance()
  7     {
  8         Lock(); // not needed after C++0x
  9         static SingletonInside instance;
  10         UnLock(); // not needed after C++0x
  11         return instance;
  12     }
  13 };
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号