国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

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

2020-01-26 13:33:52
字體:
來源:轉載
供稿:網友

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

一、懶漢模式

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

需要用鎖,來保證其線程安全性:原因:多個線程可能進入判斷是否已經存在實例的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();//借用其它類來實現,如boostif(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++0xstatic SingletonInside instance;UnLock(); // not needed after C++0xreturn instance;}};

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

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

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

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

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

總結

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宾阳县| 汉川市| 天祝| 莱芜市| 黄冈市| 金平| 宁夏| 南安市| 大姚县| 柏乡县| 商城县| 顺昌县| 西乡县| 梧州市| 方正县| 乌恰县| 云南省| 福州市| 疏勒县| 新巴尔虎右旗| 绿春县| 巴楚县| 翁牛特旗| 清水县| 环江| 垣曲县| 桦南县| 莱芜市| 杭锦旗| 舞钢市| 黄骅市| 金昌市| 晴隆县| 平乐县| 瓦房店市| 平远县| 社会| 锡林浩特市| 曲水县| 巴南区| 卢湾区|