C++/CLI中實現(xiàn)singleton模式

字號:

雙重檢測鎖(Double-Checked Locking)實現(xiàn)的Singleton模式在多線程應(yīng)用中有相當(dāng)?shù)膬r值。在ACE的實現(xiàn)中就大量使用ACE_Singleton模板類將普通類轉(zhuǎn)換成具有Singleton行為的類。這種方式很好地消除了一些重復(fù)代碼臭味,而且,優(yōu)化后的性能較標(biāo)準(zhǔn)互斥版本提高15倍。最近在用C++/CLI做一些工作,Singleton不可避免地需要用到,于是我又制造了一次車輪?! ?BR>    1 #pragma once
    2
    3 /** \class sidle::Singleton
    4 \brief Singleton (Double-Checked Locking)
    5 \author 吳爾平
    6 \version 1.0
    7 \date 2005.02.08 -
    8 \bug
    9 \warning
    10 */
    11
    12 namespace sidle
    13 {
    14  using namespace System;
    15  using namespace System::Threading;
    16
    17  template
    18  ref class Singleton
    19  {
    20   public:
    21    static _T^ Instance()
    22    {
    23     if (_instance == nullptr)
    24     {
    25      _mut->WaitOne();
    26      try
    27      {
    28       if (_instance == nullptr)
    29       {
    30        _instance = gcnew _T();
    31       }
    32      }
    33      finally
    34      {
    35       _mut->ReleaseMutex();
    36      }
    37     }
    38     return _instance;
    39    }
    40   protected:
    41    Singleton(){}
    42    static _T^ _instance;
    43    static Mutex^ _mut = gcnew Mutex();
    44  }; // ref class Singleton
    45
    46 }; // namespace sidle