執行緒安全的單例模式

2021-06-18 08:00:32 字數 1124 閱讀 9870

廢話不多說,常用的**積澱下來。

一、懶漢模式:即第一次呼叫該類例項的時候才產生乙個新的該類例項,並在以後僅返回此例項。

需要用鎖,來保證其執行緒安全性:原因:多個執行緒可能進入判斷是否已經存在例項的if語句,從而non thread safety.

使用double-check來保證thread safety.但是如果處理大量資料時,該鎖才成為嚴重的效能瓶頸。

1、靜態成員例項的懶漢模式:

1

class

singleton26

public:7

static singleton*getinstance();8};

910 singleton*singleton::getinstance()

1119

unlock();20}

21return

m_instance;

22 }

2、內部靜態例項的懶漢模式

這裡需要注意的是,c++0x以後,要求編譯器保證內部靜態變數的執行緒安全性,可以不加鎖。但c++ 0x以前,仍需要加鎖。

1

class

singletoninside25

public:6

static singletoninside*getinstance()

713 };

二、餓漢模式:即無論是否呼叫該類的例項,在程式開始時就會產生乙個該類的例項,並在以後僅返回此例項。

由靜態初始化例項保證其執行緒安全性,why?因為靜態例項初始化在程式開始時進入主函式之前就由主線程以單執行緒方式完成了初始化,不必擔心多執行緒問題。

故在效能需求較高時,應使用這種模式,避免頻繁的鎖爭奪。

1

class

singletonstatic26

public:7

static singletonstatic*getinstance()811

};12

13//

外部初始化 before invoke main

14const singletonstatic* singletonstatic::m_instance = new singletonstatic;

執行緒安全的單例模式

單例模式是為了保證乙個類只有乙個例項而且易於外界訪問。所以一般只有把建構函式,拷貝函式,析構函式,賦值函式,變數名變為私有。再用乙個get函式訪問提供介面即可。考慮執行緒安全就要加鎖。一 懶漢模式 1 靜態成員例項的懶漢模式 class singleton public static singlet...

執行緒安全的單例模式

在我們專案中,很多時候需要程式只存在乙個唯一例項。通常在專案中我會把單例模式寫成如下形式 public class singleton public static singleton getinstance return msingleton 通常以這種形式返回乙個類的唯一例項,然而在android...

執行緒安全的單例模式

單例模式是一種比較簡單的模式,確保某乙個類在記憶體中只有乙個例項,而且自行例項化並向整個系統提供這個例項,也就是說在這個系統中這個類只能例項化乙個物件。比如web頁面的計數器。執行緒安全的單例模式 這是先初始化物件,稱為餓漢式 single類一進記憶體,就已經生成物件 執行緒安全的 class si...