Add

boost::singleton : 简单,高效,线程安全的singleton模式实现


转至:http://www.cppblog.com/eXile

本着简单高效的原则,  boost::singleton是singleton模式的又一种实现,  它基于以下假设, 一个良好的设计, 在进入main函数前应该是单线程的,此时,我们可以采用和全局变量相似的办法来使用singleton,因为所有的全局变量在进入main以前已经全部初始化。这样我们就避开了多线程的竞争条件. 但直接使用全局变量有一个严重的缺陷,就是当你使用全局变量时,你并不能保证它已经得到初始化,这种情况发生在 static code中。(static code是boost文档中的用语, 我想它是指在进入main函数以前要执行的代码)。

     boost::singlton实现的关键有两点
         (1) sington 在进入main函数前初始化.
          (2)第一次使用时, singlton已得到正确的初始化(包括在static code中情况).

 boost中的实现代码如下所示:
 
template <typename T>
struct singleton
{
  private:
        struct object_creator
       {
               object_creator() { singleton<T>::instance(); }
               inline void do_nothing() const { }
       };
     static object_creator create_object;
     singleton();
  public:
     typedef  T  object_type;
     static object_type & instance()
    {
         static object_type obj;
         create_object.do_nothing();
         return obj;
    }
};

template <typename T>  typename singleton<T>::object_creator singleton<T>::create_object;

Random Posts Recent Comments

  • 女友糖尿病害我蛀牙 Says:

    汗一个…...

  • Htj06 Says:

    zhenyouchuangyi...

  • 电商圈 Says:

    试图该怎么建立啊,,怎在程序中是吸纳...

  • edward Says:

    看得人心旷神怡,好文,情不自禁的顶一下...

  • Daniel Says:

    我也在处理这个问题,没有找到好的方法。我用了楼上兄弟的方法,还是可以的。不知道您找到好的方法了吗、我暂时楼上兄弟的方法。...

  • 卡,卡 Says:

    弱弱问一句:博主,你博客的模板这样设计pv高吗?...

  • 站长工具 Says:

    博主,兔年快乐!...

  • health Says:

    great post!!I hope I can read more in your website....

  • pdu Says:

    好博文,支持分享...

  • 站长工具 Says:

    博主的文章很不错,我是站长工具-站长精灵的作者,一款专业的SEO工具软件(可以帮您提高博客的流量),想跟您交换个链接,不知可否...

Tag Cloud

arm audio blog brew cache class debug flash google html j2me java javascript Joke linux lua mobile mtk php python ror ruby server shell stream unix web windows 优化 动态加载 女人 女生 平台 开发 手机 技术 流媒体 测试 漫画 生活 男人 男生 缓存 芯片