C 單例模式 與執行緒安全

2021-06-16 11:31:57 字數 1662 閱讀 2829

單例模式:作為物件的建立模式,單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。這個類稱為單例類。

單例模式的要點有三個;一是某個類只能有乙個例項;二是它必須自行建立這個例項;三是它必須自行向整個系統提供這個例項。在下面 

的物件圖中,有乙個"單例物件",而"客戶甲"、"客戶乙" 和"客戶丙"是單例物件的三個客戶物件。可以看到,所有的客戶物件共享乙個單例對 

象。而且從單例物件到自身的連線線可以看出,單例物件持有對自己的引用。

一些資源管理器常常設計成單例模式。讓乙個類產生同乙個物件對客戶端服務的時候,比如管理資料庫連線,管理檔案io等,這時我們就要使用 

到單例模式。下面是該模式的c++實現(注澤說明)

#include 

using namespace std;    

//單例類的c++實現    

class singleton    

;   

//構造方法實現    

singleton::singleton()    

singleton::~singleton()    

//初始化靜態成員    

singleton* singleton::instance=new singleton();    

singleton* singleton::getinstance()    

//seter && getter含數    

int singleton::getvar()    

void singleton::setvar(int var)    

//main    

int main(int argc, char* argv)    

輸出如下:

singleton constructor

ton1 var = 20

ton2 var = 150

在輸出結果中,構造方法只呼叫了一次,ton1與ton2是指向同乙個物件的。

單例模式是建構函式被私有化,並且唯一的例項在類中的私有成員中被定義成static,

類的初始化就做了一次。

singleton constructor

ton1 var = 20

ton2 var = 150

所以所有的新的物件都只用這乙個例項。和靜態成員變數有區別

singleton *ton1 = singleton::getinstance();    

singleton *ton2 = singleton::getinstance();    

class singleton 

;singleton * singleton::getsingleinstance()

unlock();//

}return ins_ptr;}

幾個條件:

1. 單例的構造是執行緒安全的。我建議在程式還只有單個執行緒的時候構造例項,這樣就不用double-lock模式,meyers模式就足夠了:

class single

public:

static single & getinst()

};2. 單例本身是執行緒安全的,即呼叫單例物件的介面的時候,必須保證執行緒安全;

3. 單例的析構是執行緒安全的。如果程式裡面不要顯式析構單例物件,就讓os**吧,這樣程式設計師不需要有做任何事情。

C 單例模式與執行緒安全

1.教科書裡的單例模式 我們都很清楚乙個簡單的單例模式該怎樣去實現 建構函式宣告為private或protect防止被外部函式例項化,內部儲存乙個private static的類指標儲存唯一的例項,例項的動作由乙個public的類方法代勞,該方法也返回單例類唯一的例項。上 class singlet...

c 多執行緒單例模式 執行緒安全C 單例模式

我對此處記錄的單例模式有一些疑問 http us library ff650316.aspx 以下 摘自該文章 using system public sealed class singleton private static volatile singleton instance private ...

單例模式與執行緒安全

請看如下的單例類 class singleton return singleton 首先判斷singleton是否為null,如果是就建立singleton物件,否則直接返回singleton。但是判斷和建立並非原子操作,假設執行緒1正在執行null singleton,判斷為true,準備執行下一...