欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)使用這種模式,避免頻繁的鎖爭奪。

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é)

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

相關(guān)文章

  • C語言return知識(shí)點(diǎn)總結(jié)

    C語言return知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家整理的是關(guān)于C語言return知識(shí)點(diǎn)總結(jié)內(nèi)容,需要的朋友們可以學(xué)習(xí)參考下。
    2020-02-02
  • C++語言編寫寫日志類

    C++語言編寫寫日志類

    這篇文章主要介紹了C++語言編寫寫日志類的相關(guān)資料,支持寫日志級(jí)別設(shè)置、支持多線程、支持可變形參表寫日志,需要的朋友可以參考下
    2015-12-12
  • C/C++?string.h庫中memcpy()和memmove()的使用

    C/C++?string.h庫中memcpy()和memmove()的使用

    memcpy與memmove的目的都是將N個(gè)字節(jié)的源內(nèi)存地址的內(nèi)容拷貝到目標(biāo)內(nèi)存地址中,本文主要介紹了C/C++?string.h庫中memcpy()和memmove()的使用,感興趣的可以了解一下
    2023-12-12
  • 一篇文章帶你了解C++多態(tài)的實(shí)現(xiàn)原理

    一篇文章帶你了解C++多態(tài)的實(shí)現(xiàn)原理

    這篇文章主要介紹了C++多態(tài)的實(shí)現(xiàn)機(jī)制理解的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下,希望能給你帶來幫助
    2021-08-08
  • C語言代碼實(shí)現(xiàn)推箱子小游戲

    C語言代碼實(shí)現(xiàn)推箱子小游戲

    這篇文章主要為大家詳細(xì)介紹了C語言代碼實(shí)現(xiàn)推箱子小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • opencv2基于SURF特征提取實(shí)現(xiàn)兩張圖像拼接融合

    opencv2基于SURF特征提取實(shí)現(xiàn)兩張圖像拼接融合

    這篇文章主要為大家詳細(xì)介紹了opencv2基于SURF特征提取實(shí)現(xiàn)兩張圖像拼接融合,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 求子數(shù)組最大和的解決方法詳解

    求子數(shù)組最大和的解決方法詳解

    本篇文章是對(duì)求子數(shù)組最大和的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言實(shí)現(xiàn)全排列算法模板的方法

    C語言實(shí)現(xiàn)全排列算法模板的方法

    這篇文章主要介紹了C語言實(shí)現(xiàn)全排列算法模板的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Opencv透視變換綜合實(shí)例詳解

    Opencv透視變換綜合實(shí)例詳解

    這篇文章主要為大家詳細(xì)介紹了Opencv透視變換綜合實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • 深入了解C++封閉類的定義與使用

    深入了解C++封閉類的定義與使用

    一個(gè)類的成員變量如果是另一個(gè)類的對(duì)象,就稱之為“成員對(duì)象”。包含成員對(duì)象的類叫封閉類(enclosed?class)。本文主要和大家聊聊C++封閉類的使用,需要的可以參考一下
    2022-11-11

最新評(píng)論