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

C++無(wú)鎖數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)示例詳解

 更新時(shí)間:2023年12月27日 09:11:05   作者:kkkK2008  
這篇文章主要為大家介紹了C++無(wú)鎖數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

無(wú)鎖數(shù)據(jù)結(jié)構(gòu)

無(wú)鎖并非真正無(wú)鎖,正如零拷貝并非零次拷貝。

實(shí)現(xiàn)

多生產(chǎn)者多消費(fèi)者隊(duì)列

// 基于自旋鎖(或者CAS,原理相同,后者實(shí)現(xiàn)較為復(fù)雜)
// 通過(guò)atomic庫(kù)中atomic_flag類進(jìn)行實(shí)現(xiàn)自旋達(dá)到多生產(chǎn)者多消費(fèi)者同步。
#include <iostream>
#include <atomic>
class Queue {
    atomic_flag spin_push_flag = false, spin_pop_flag = false;
public:
       void Push() {
        // 自旋+上鎖
        while (spin_push_flag.test_and_set())
            ;
        // working...
        // 解鎖
        spin_push_flag.clear();
    } 
    void Pop() {
        // 自旋+上鎖
        while (spin_pop_flag.test_and_set())
            ;
        // working...
        // 解鎖
        spin_pop_flag.clear();
    }
};

單生產(chǎn)者單消費(fèi)者隊(duì)列

// 類似內(nèi)核kfifo
#include <iostream>
#include <mutex>
class Queue {
private:
    mutex mutex_push, mutex_pop;
public:
       void Push() {
        lock_gurad<mutex> lck(mutex_push);
        // working...
    } 
    void Pop() {
        lock_gurad<mutex> lck(mutex_pop);
        // working...
    }
};

測(cè)試

前提

每次主線程十次循環(huán)建立100個(gè)線程訪問(wèn)隊(duì)列,即1k線程并發(fā)。取100次平均值。一共三個(gè)版本:互斥鎖單線程訪問(wèn)a、單生產(chǎn)者單消費(fèi)者b、多生產(chǎn)者多消費(fèi)者c

場(chǎng)景結(jié)果
Push和Pop接口不工作a和b時(shí)間相仿;c是前二100倍
Push和Pop接口處理一些簡(jiǎn)單工作a和b時(shí)間相仿;c是前二的10倍
Push和Pop接口處理一些較耗時(shí)工作b最快;c其次,為b的2倍;a最慢,為b的7-8倍

總結(jié)

綜合來(lái)看:?jiǎn)紊a(chǎn)者單消費(fèi)者模型效率最優(yōu)(Linux內(nèi)核kfifo)。不過(guò)具體使用何種模型實(shí)現(xiàn)線程安全,要根據(jù)實(shí)際場(chǎng)景進(jìn)行選擇,并且多測(cè)試,才能夠達(dá)到最佳模型的選擇。此處仍有一點(diǎn)未提及:若要實(shí)現(xiàn)多線程并發(fā)訪問(wèn)數(shù)據(jù)結(jié)構(gòu),即單生產(chǎn)者單消費(fèi)者或者多生產(chǎn)者多消費(fèi)者,仍需要盡量避免共同數(shù)據(jù)的訪問(wèn)防止segment fault。

以上就是C++無(wú)鎖數(shù)據(jù)結(jié)構(gòu)的詳細(xì)內(nèi)容,更多關(guān)于C++無(wú)鎖數(shù)據(jù)結(jié)構(gòu)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++ 函數(shù) strftime 和時(shí)間格式示例詳解

    C++ 函數(shù) strftime 和時(shí)間格式示例詳解

    strftime 是 C/C++ 標(biāo)準(zhǔn)庫(kù)中用于格式化日期和時(shí)間的函數(shù),定義在 <ctime> 頭文件中,它將 tm 結(jié)構(gòu)體中的時(shí)間信息轉(zhuǎn)換為指定格式的字符串,是處理時(shí)間輸出的核心工具,這篇文章主要介紹了C++ 函數(shù) strftime和時(shí)間格式,需要的朋友可以參考下
    2025-06-06
  • C++圖文并茂分析講解內(nèi)存管理

    C++圖文并茂分析講解內(nèi)存管理

    本章主要介紹C語(yǔ)言與C++的內(nèi)存管理,以C++的內(nèi)存分布作為引入,介紹C++不同于C語(yǔ)言的內(nèi)存管理方式(new delete對(duì)比 malloc free),感興趣的朋友來(lái)看看吧
    2022-09-09
  • 淺談關(guān)于C語(yǔ)言中#define的副作用

    淺談關(guān)于C語(yǔ)言中#define的副作用

    這篇文章主要介紹了關(guān)于C語(yǔ)言中#define的副作用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • C語(yǔ)言實(shí)現(xiàn)小貓釣魚(yú)游戲

    C語(yǔ)言實(shí)現(xiàn)小貓釣魚(yú)游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)小貓釣魚(yú)游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C語(yǔ)言?動(dòng)態(tài)內(nèi)存管理全面解析

    C語(yǔ)言?動(dòng)態(tài)內(nèi)存管理全面解析

    動(dòng)態(tài)內(nèi)存是相對(duì)靜態(tài)內(nèi)存而言的。所謂動(dòng)態(tài)和靜態(tài)就是指內(nèi)存的分配方式。動(dòng)態(tài)內(nèi)存是指在堆上分配的內(nèi)存,而靜態(tài)內(nèi)存是指在棧上分配的內(nèi)存,本文帶你深入探究C語(yǔ)言中動(dòng)態(tài)內(nèi)存的管理
    2022-02-02
  • C++中replace()函數(shù)使用方法匯總

    C++中replace()函數(shù)使用方法匯總

    這篇文章主要介紹了C++中replace()函數(shù)使用方法匯總,在這篇文章中為大家詳細(xì)介紹C++ replace()函數(shù)的各種應(yīng)用方式,希望朋友們可以從這里介紹的內(nèi)容充分掌握這一應(yīng)用技巧
    2015-11-11
  • C語(yǔ)言實(shí)現(xiàn)學(xué)生信息管理程序

    C語(yǔ)言實(shí)現(xiàn)學(xué)生信息管理程序

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)學(xué)生信息管理程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • 詳解C/C++內(nèi)存管理

    詳解C/C++內(nèi)存管理

    內(nèi)存管理是C++最令人切齒痛恨的問(wèn)題,也是C++最有爭(zhēng)議的問(wèn)題,C++高手從中獲得了更好的性能,更大的自由,今天給大家分享C/C++內(nèi)存管理的實(shí)例代碼,需要的朋友參考下吧
    2021-06-06
  • C語(yǔ)言詳細(xì)分析講解關(guān)鍵字goto與void的作用

    C語(yǔ)言詳細(xì)分析講解關(guān)鍵字goto與void的作用

    我們?cè)贑語(yǔ)言中經(jīng)常會(huì)見(jiàn)到void,也會(huì)偶爾見(jiàn)到goto,那么C語(yǔ)言中既然有g(shù)oto,為什么我們?cè)诖a中見(jiàn)的很少呢?在以前很多的項(xiàng)目經(jīng)驗(yàn)中,我們得到這樣一條潛規(guī)則:一般項(xiàng)目都是禁用goto的,程序質(zhì)量與goto的出現(xiàn)次數(shù)成反比。自后也就造成了我們一般不會(huì)使用goto
    2022-04-04
  • 基于C語(yǔ)言實(shí)現(xiàn)計(jì)算生辰八字五行的示例詳解

    基于C語(yǔ)言實(shí)現(xiàn)計(jì)算生辰八字五行的示例詳解

    生辰八字,簡(jiǎn)稱八字,是指一個(gè)人出生時(shí)的干支歷日期;年月日時(shí)共四柱干支,每柱兩字,合共八個(gè)字。這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)計(jì)算生辰八字五行的示例代碼,需要的可以參考一下
    2023-03-03

最新評(píng)論

邢台县| 囊谦县| 梨树县| 和硕县| 高碑店市| 柏乡县| 青海省| 苏州市| 东兰县| 孝义市| 都匀市| 滕州市| 南皮县| 吉木萨尔县| 灵石县| 蒙山县| 镇平县| 开原市| 敦煌市| 常熟市| 民县| 即墨市| 洛川县| 汕尾市| 泰兴市| 重庆市| 淮滨县| 贵定县| 裕民县| 丰原市| 河北省| 同江市| 甘洛县| 台南市| 济阳县| 浮梁县| 确山县| 烟台市| 遂昌县| 库伦旗| 阜平县|