亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++線程安全的單例模式講解

發布時間:2020-08-20 18:48:16 來源:腳本之家 閱讀:238 作者:修語講編程 欄目:編程語言

廢話不多說,常用的代碼積淀下來。

一、懶漢模式

即第一次調用該類實例的時候才產生一個新的該類實例,并在以后僅返回此實例。

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

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

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

class Singleton
{
private:
static Singleton* m_instance;
Singleton(){}
public:
static Singleton* getInstance();
};
Singleton* Singleton::getInstance()
{
if(NULL == m_instance)
{
Lock();//借用其它類來實現,如boost
if(NULL == m_instance)
{
m_instance = new Singleton;
}
UnLock();
}
return m_instance;
}

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

這里需要注意的是,C++0X以后,要求編譯器保證內部靜態變量的線程安全性,可以不加鎖。但C++ 0X以前,仍需要加鎖。

class SingletonInside
{
private:
SingletonInside(){}
public:
static SingletonInside* getInstance()
{
Lock(); // not needed after C++0x
static SingletonInside instance;
UnLock(); // not needed after C++0x
return instance;
}
};

二、餓漢模式:即無論是否調用該類的實例,在程序開始時就會產生一個該類的實例,并在以后僅返回此實例。

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

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

class SingletonStatic
{
private:
static const SingletonStatic* m_instance;
SingletonStatic(){}
public:
static const SingletonStatic* getInstance()
{
return m_instance;
}
};
//外部初始化 before invoke main
const SingletonStatic* SingletonStatic::m_instance = new SingletonStatic;

好了,線程單例模式就講到這里,還希望對大家有所幫助!

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。如果你想了解更多相關內容請查看下面相關鏈接

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宁南县| 葫芦岛市| 福州市| 土默特右旗| 出国| 江山市| 巴彦淖尔市| 阿拉善左旗| 伊川县| 清原| 海阳市| 西乌| 安徽省| 威信县| 乳山市| 靖远县| 绍兴市| 寻乌县| 建水县| 应用必备| 孝感市| 齐齐哈尔市| 若羌县| 静宁县| 双城市| 六枝特区| 贵溪市| 大余县| 竹溪县| 湘潭县| 乌兰察布市| 广德县| 民勤县| 长沙市| 沂源县| 车致| 九江县| 社会| 新沂市| 阳春市| 麟游县|