设为首页 加入收藏

TOP

Singleton模式中的DoubleCheck机制
2014-11-12 13:45:05 】 浏览:5402
Tags:Singleton 模式 DoubleCheck 机制

  在多线程环境下,使用Singleton模式很重要的一点就是要保证用Double Check机制保证线程安全。


  很多时候, 我们通常需要使用singleton模式来保证对象实例的唯一性。通常我们是这么写的:


  class Singleton


  {


  private:


  static Singleton *instance;


  public:


  static Singleton* getInstance();


  private:


  Singleton();//将构造函数设为Private以保证只能通过getInstance获取对象实例.


  };


  Singleton *Singleton::instance = NULL;


  //版本一:


  Singleton* Singleton::getInstance()


  {


  if(NULL == instance) //检查是否已经生成对象了


  {


  //对象构造区域


  instance = new Singleton();


  }


  return instance;


  }


  Singleton::Singleton()


  {


  //initializing...


  }


  然而,如果在多线程环境下,Singleton::getInstance() 同时被多个线程调用,也许第一个线程在通过if(NULL == instance)语句后被中断挂起,这时其它线程也会进入该区域,这时instance = new Singleton();语句就会被调用两次或者更多,违背了singleton模式的初衷。为了保证对象构造区域为一个互斥区间,这时我们考虑引入 mutex互斥信号变量。比如:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇关于c/c++中缓冲的使用 下一篇常量指针和指针常量

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目