C 實現Singleton模式

2021-10-03 12:53:58 字數 992 閱讀 2737

單例模式定義:保證乙個類僅有乙個例項,並提供乙個該例項的全域性訪問點。

類的宣告:

class

singleton

;

singleton * singleton::m_instance =

nullptr

;

解法1:執行緒非安全版本

singleton* singleton::

getinstance()

return m_instance;

}

解法2:執行緒安全版本,但鎖的代價過高

singleton* singleton::

getinstance()

return m_instance;

}

解析:當m_instance不為空時,加鎖時不必要的,此時是在進行讀操作。

解法3:雙檢查鎖,但由於記憶體讀寫reorder不安全

singleton* singleton::

getinstance()

}return m_instance;

}

解析:m_instance = new singleton(),1)、先分配記憶體,2)、呼叫構造器,3)、返回分配記憶體的位址。

存在這樣一種情況:1)3)2)的執行順序,當執行了1)3)後,m_instance不為空,直接就return m_instance了。

解法4:c++11版本之後的跨平台實現(volatile)

std::atomic> singleton::m_instance;

std::mutex singleton::m_mutex;

singleton* singleton::

get_instance()

}return tmp;

}

Singleton模式的C 實現研究

附件一 演示程式 清單 描述 實現singleton include include 第一種實現 使用模板函式 class mysingleton1 mysingleton1 operator const mysingleton1 template friend t getinstanceref p...

Singleton設計模式的C 實現

singleton模式 singleton 譯為單件或單態 模式是設計模式中比較簡單而常用的模式。有些時候在整個應用程式中,會要求某個類有且只有乙個例項,這個時候可以採用singleton模式進行設計。用singleton模式設計的類不僅能保證在應用中只有乙個例項,而且提供了一種非全域性變數的方法進...

Singleton模式的實現

設計乙個類,我們只能生成該類的乙個例項。因為我們只能生成乙個例項,所以我們必須把建構函式設定為私有函式已禁止他人建立例項。可以定義乙個靜態的例項,在需要的時候建立該例項。public sealed class sinleton1 private static singleton1 instance ...