廢話不多說,常用的**積澱下來。
一、懶漢模式:即第一次呼叫該類例項的時候才產生乙個新的該類例項,並在以後僅返回此例項。
需要用鎖,來保證其執行緒安全性:原因:多個執行緒可能進入判斷是否已經存在例項的if語句,從而non thread safety.
使用double-check來保證thread safety.但是如果處理大量資料時,該鎖才成為嚴重的效能瓶頸。
1、靜態成員例項的懶漢模式:
12、內部靜態例項的懶漢模式class
singleton26
public:7
static singleton*getinstance();8};
910 singleton*singleton::getinstance()
1119
unlock();20}
21return
m_instance;
22 }
這裡需要注意的是,c++0x以後,要求編譯器保證內部靜態變數的執行緒安全性,可以不加鎖。但c++ 0x以前,仍需要加鎖。
1二、餓漢模式:即無論是否呼叫該類的例項,在程式開始時就會產生乙個該類的例項,並在以後僅返回此例項。class
singletoninside25
public:6
static singletoninside*getinstance()
713 };
由靜態初始化例項保證其執行緒安全性,why?因為靜態例項初始化在程式開始時進入主函式之前就由主線程以單執行緒方式完成了初始化,不必擔心多執行緒問題。
故在效能需求較高時,應使用這種模式,避免頻繁的鎖爭奪。
1(完)class
singletonstatic26
public:7
static
const singletonstatic*getinstance()811
};12
13//
外部初始化 before invoke main
14const singletonstatic* singletonstatic::m_instance = new singletonstatic;
c 多執行緒單例模式 執行緒安全C 單例模式
我對此處記錄的單例模式有一些疑問 http us library ff650316.aspx 以下 摘自該文章 using system public sealed class singleton private static volatile singleton instance private ...
C 執行緒安全的單例模式
一 懶漢模式 即第一次呼叫該類例項的時候才產生乙個新的該類例項,並在以後僅返回此例項。需要用鎖,來保證其執行緒安全性 原因 多個執行緒可能進入判斷是否已經存在例項的if語句,從而non thread safety.使用double check來保證thread safety.但是如果處理大量資料時,...
C 執行緒安全的單例模式
廢話不多說,常用的 積澱下來。一 懶漢模式 即第一次呼叫該類例項的時候才產生乙個新的該類例項,並在以後僅返回此例項。需要用鎖,來保證其執行緒安全性 原因 多個執行緒可能進入判斷是否已經存在例項的if語句,從而non thread safety.使用double check來保證thread safe...