技术开发 频道

C++/CLI 中实现 singleton 模式

【IT168 技术文档】

  双重检测锁(Double-Checked Locking)实现的Singleton模式在多线程应用中有相当的价值。在ACE的实现中就大量使用ACE_Singleton模板类将普通类转换成具有Singleton行为的类。这种方式很好地消除了一些重复代码臭味,而且,优化后的性能较标准互斥版本提高15倍。最近在用C++/CLI做一些工作,Singleton不可避免地需要用到,于是我又制造了一次车轮。

#pragma once /** \class sidle::Singleton \brief Singleton (Double-Checked Locking) \author 吴尔平 \version 1.0 \date 2005.02.08 - \bug \warning */ namespace sidle {  using namespace System;  using namespace System::Threading;  template<typename _T>  ref class Singleton  {   public:    static _T^ Instance()    {     if (_instance == nullptr)     {      _mut->WaitOne();      try      {       if (_instance == nullptr)       {        _instance = gcnew _T();       }      }      finally      {       _mut->ReleaseMutex();      }     }     return _instance;    }   protected:    Singleton(){}    static _T^ _instance;    static Mutex^ _mut = gcnew Mutex();  }; // ref class Singleton }; // namespace sidle

 

 

 

0
相关文章