最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2019年01月17日 10:33:24   作者:修語講編程  
今天小編就為大家分享一篇關(guān)于C++線程安全的單例模式講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧

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

一、懶漢模式

即第一次調(diào)用該類實(shí)例的時(shí)候才產(chǎn)生一個(gè)新的該類實(shí)例,并在以后僅返回此實(shí)例。

需要用鎖,來保證其線程安全性:原因:多個(gè)線程可能進(jìn)入判斷是否已經(jīng)存在實(shí)例的if語句,從而non thread safety。

使用double-check來保證thread safety。但是如果處理大量數(shù)據(jù)時(shí),該鎖才成為嚴(yán)重的性能瓶頸。

1、靜態(tài)成員實(shí)例的懶漢模式:

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

2、內(nèi)部靜態(tài)實(shí)例的懶漢模式

這里需要注意的是,C++0X以后,要求編譯器保證內(nèi)部靜態(tài)變量的線程安全性,可以不加鎖。但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;
}
};

二、餓漢模式:即無論是否調(diào)用該類的實(shí)例,在程序開始時(shí)就會(huì)產(chǎn)生一個(gè)該類的實(shí)例,并在以后僅返回此實(shí)例。

由靜態(tài)初始化實(shí)例保證其線程安全性,WHY?因?yàn)殪o態(tài)實(shí)例初始化在程序開始時(shí)進(jìn)入主函數(shù)之前就由主線程以單線程方式完成了初始化,不必?fù)?dān)心多線程問題。

故在性能需求較高時(shí),應(yīng)使用這種模式,避免頻繁的鎖爭(zhēng)奪。

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;

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

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • 深入分析Visual C++進(jìn)行串口通信編程的詳解

    深入分析Visual C++進(jìn)行串口通信編程的詳解

    本篇文章是對(duì)Visual C++進(jìn)行串口通信編程進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • GCC 編譯使用動(dòng)態(tài)鏈接庫(kù)和靜態(tài)鏈接庫(kù)的方法

    GCC 編譯使用動(dòng)態(tài)鏈接庫(kù)和靜態(tài)鏈接庫(kù)的方法

    根據(jù)鏈接時(shí)期的不同,庫(kù)又有靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)之分,有別于靜態(tài)庫(kù),動(dòng)態(tài)庫(kù)的鏈接是在程序執(zhí)行的時(shí)候被鏈接的
    2013-03-03
  • 微軟Detours Hook庫(kù)編譯與使用教程

    微軟Detours Hook庫(kù)編譯與使用教程

    Detours 是一個(gè)兼容多個(gè)Windows系列操作系統(tǒng)版本(包括 Windows XP 到 Windows 11)的工具庫(kù),Detours 是微軟開發(fā)的一個(gè)強(qiáng)大的Windows API鉤子庫(kù),用于監(jiān)視和攔截函數(shù)調(diào)用,這篇文章給大家介紹微軟Detours Hook庫(kù)編譯與使用,感興趣的朋友一起看看吧
    2024-08-08
  • 全排列算法的原理和實(shí)現(xiàn)代碼

    全排列算法的原理和實(shí)現(xiàn)代碼

    這篇文章主要介紹了全排列算法的原理和實(shí)現(xiàn)代碼,全排列是將一組數(shù)按一定順序進(jìn)行排列,如果這組數(shù)有n個(gè),那么全排列數(shù)為n!個(gè),需要的朋友可以參考下
    2014-08-08
  • C++語言實(shí)現(xiàn)hash表詳解及實(shí)例代碼

    C++語言實(shí)現(xiàn)hash表詳解及實(shí)例代碼

    這篇文章主要介紹了C++語言實(shí)現(xiàn)hash表詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • C++超詳細(xì)講解運(yùn)算符重載

    C++超詳細(xì)講解運(yùn)算符重載

    本文包括了對(duì)C++類的6個(gè)默認(rèn)成員函數(shù)中的賦值運(yùn)算符重載和取地址和const對(duì)象取地址操作符的重載。運(yùn)算符是程序中最最常見的操作,例如對(duì)于內(nèi)置類型的賦值我們直接使用=賦值即可,因?yàn)檫@些編譯器已經(jīng)幫我們做好了,但是對(duì)象的賦值呢?能直接賦值嗎
    2022-06-06
  • Trae+Qt+MSVC環(huán)境配置的實(shí)現(xiàn)示例

    Trae+Qt+MSVC環(huán)境配置的實(shí)現(xiàn)示例

    本文主要介紹了Trae+Qt+MSVC環(huán)境配置,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • 在C++中使用HP-Socket

    在C++中使用HP-Socket

    這篇文章主要介紹了C++中簡(jiǎn)單使用HP-Socket,HP-Socket 是一套通用的高性能 TCP/UDP /HTTP 通信 框架 ,包含服務(wù)端組件、客戶端組件和 Agent 組件,廣泛適用于各種不同應(yīng)用場(chǎng)景的 TCP/UDP /HTTP 通信系統(tǒng),下面來看看更具體的介紹吧
    2021-11-11
  • c語言單鏈表尾添加的深入講解

    c語言單鏈表尾添加的深入講解

    這篇文章主要給大家介紹了關(guān)于c語言單項(xiàng)鏈表尾添加的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • C++如何通過Qt反射機(jī)制實(shí)現(xiàn)數(shù)據(jù)類序列化

    C++如何通過Qt反射機(jī)制實(shí)現(xiàn)數(shù)據(jù)類序列化

    在?C++?工程中經(jīng)常需要使用數(shù)據(jù)類,并對(duì)數(shù)據(jù)類進(jìn)行存儲(chǔ)、打印、調(diào)試等操作,所以本文就來聊聊C++如何通過Qt反射機(jī)制實(shí)現(xiàn)數(shù)據(jù)類序列化吧
    2025-04-04

最新評(píng)論

新余市| 北川| 玉山县| 江源县| 河源市| 海兴县| 柳江县| 奎屯市| 商丘市| 德安县| 平阴县| 乌拉特前旗| 房山区| 扶余县| 方正县| 高雄县| 鹤峰县| 闽侯县| 岫岩| 岳阳市| 饶平县| 澳门| 泰安市| 新疆| 临汾市| 府谷县| 古浪县| 临沂市| 福清市| 长子县| 独山县| 安阳县| 安陆市| 扎赉特旗| 吉林省| 太保市| 玛沁县| 阳高县| 广汉市| 丰镇市| 内黄县|