精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C++面試題:多個線程像數組里面添加數據,你會怎么設計這個數組?

開發
多線程環境下向數組添加數據的結構時,我們需要考慮線程安全。一般有以下三種常見的設計方案。

多線程環境下向數組添加數據的結構時,我們需要考慮線程安全。一般有幾種常見的設計方案: 

方案 1:互斥鎖保護動態數組

實現思路:使用互斥鎖(std::mutex)保護對數組的每次操作,確保同一時間只有一個線程修改數組。 這個方案是最簡單最常見的,編寫代碼也容易。 

代碼示例: 

#include <vector>
#include <mutex>

classThreadSafeVector {
private:
    std::vector<int> data;
    std::mutex mtx;

public:
    voidadd(int value){
        std::lock_guard<std::mutex> lock(mtx);
        data.push_back(value);
    }
};
  • 優點:簡單易實現,直接利用標準庫。  
  • 缺點:高并發下鎖競爭可能成為性能瓶頸。  

方案 2:原子索引 + 預分配內存

什么是原子索引? 

原子索引是一種在多線程環境下,通過 原子操作 管理共享資源(如數組寫入位置)的

技術。它的核心思想是使用原子變量(如 std::atomic)記錄當前可寫入的位置索引,多個線程通過原子操作安全地競爭索引,避免數據競爭(Data Race)。 

實現思路:預分配固定大小的數組,通過原子變量管理當前寫入位置索引。僅當空間不足時,通過鎖動態擴容。  

代碼示例: 

#include <vector>
#include <atomic>
#include <mutex>

classConcurrentArray {
private:
    std::vector<int> data;
    std::atomic<size_t> index{0};
    std::mutex mtx;
    staticconstsize_t INIT_SIZE = 1024;

public:
    ConcurrentArray() {
        data.resize(INIT_SIZE);
    }

    voidadd(int value){
        size_t idx = index.fetch_add(1, std::memory_order_relaxed);
        if (idx < data.size()) {
            data[idx] = value;
        } else {
            // 處理擴容
            std::lock_guard<std::mutex> lock(mtx);
            if (idx >= data.size()) {
                data.resize(data.size() * 2);
            }
            data[idx] = value;
        }
    }
};
  • 優點:大部分寫入操作無鎖,性能較高。  
  • 缺點:預分配可能導致內存浪費,動態擴容時仍需加鎖。  

方案 3:線程本地存儲(Thread-Local Storage)

什么是線程本地存儲? 

線程本地存儲(TLS)是一種允許每個線程擁有獨立數據副本的機制。在多線程環境中,每個線程操作自己的本地數據,無需與其他線程競爭共享資源,從而完全避免鎖的使用。當需要全局匯總數據時,再通過同步機制(如鎖)合并各線程的本地數據。 

實現思路:每個線程使用本地數組緩存數據,定期將數據合并到全局數組。  

代碼示例: 

#include <vector>
#include <mutex>
#include <thread>

classThreadLocalArray {
private:
    thread_localstatic std::vector<int> local_data;
    std::vector<int> global_data;
    std::mutex mtx;

public:
    voidadd(int value){
        local_data.push_back(value);
        if (local_data.size() >= 100) { // 定期合并
            merge();
        }
    }

    voidmerge(){
        std::lock_guard<std::mutex> lock(mtx);
        global_data.insert(global_data.end(), local_data.begin(), local_data.end());
        local_data.clear();
    }
};
  • 優點:完全無鎖寫入,合并時才需同步。  
  • 缺點:數據訪問延遲,合并時可能阻塞。  

三個方案對比測試

我們模擬寫入下:寫入 1 萬個數據和 10 萬個數據 

示例代碼: 

#include <iostream>
#include <vector>
#include <atomic>
#include <mutex>
#include <thread>
#include <chrono>
#include <memory>

constexprint TOTAL_DATA = 10000;
constexprint THREAD_NUM = 4;
constexprint DATA_PER_THREAD = TOTAL_DATA / THREAD_NUM;

// 測試工具函數
template<typename T>
voidrun_test(T& container, const std::string& name){
    auto start = std::chrono::high_resolution_clock::now();

    std::vector<std::thread> threads;
    for (int i = 0; i < THREAD_NUM; ++i) {
        threads.emplace_back([&]() {
            for (int j = 0; j < DATA_PER_THREAD; ++j) {
                container.add(j);
            }
            });
    }

    for (auto& t : threads) {
        t.join();
    }

    auto end = std::chrono::high_resolution_clock::now();
    std::chrono::duration<double> duration = end - start;

    std::cout << name << " Time: " << duration.count() << "s\n";
}

// 方案1:互斥鎖保護動態數組
classMutexVector {
    std::vector<int> data;
    std::mutex mtx;
public:
    voidadd(int value){
        std::lock_guard<std::mutex> lock(mtx);
        data.push_back(value);
    }
};

// 方案2:原子索引+預分配內存
classAtomicVector {
    std::vector<int> data;
    std::atomic<size_t> index{ 0 };
    std::mutex mtx;
public:
    AtomicVector() { data.resize(1024); }

    voidadd(int value){
        size_t idx = index.fetch_add(1, std::memory_order_relaxed);
        if (idx < data.size()) {
            data[idx] = value;
        }
        else {
            std::lock_guard<std::mutex> lock(mtx);
            if (idx >= data.size()) data.resize(data.size() * 2);
            data[idx] = value;
        }
    }
};

// 方案3:線程本地存儲
classThreadLocalArray {
    thread_localstatic std::vector<int> local_data;
    std::vector<int> global_data;
    std::mutex mtx;
public:
    voidadd(int value){
        local_data.push_back(value);
        if (local_data.size() >= 100) {
            std::lock_guard<std::mutex> lock(mtx);
            global_data.insert(global_data.end(), local_data.begin(), local_data.end());
            local_data.clear();
        }
    }

    ~ThreadLocalArray() {
        std::lock_guard<std::mutex> lock(mtx);
        global_data.insert(global_data.end(), local_data.begin(), local_data.end());
    }
};
thread_local std::vector<int> ThreadLocalArray::local_data;

intmain(){
    // 測試方案1
    {
        MutexVector vec;
        run_test(vec, "MutexVector");
    }

    // 測試方案2
    {
        AtomicVector vec;
        run_test(vec, "AtomicVector");
    }

    // 測試方案3
    {
        ThreadLocalArray arr;
        run_test(arr, "ThreadLocalArray");
    }

    return0;
}

TOTAL_DATA = 10000; 

我在 VS2022 上運行結果如下圖: 

TOTAL_DATA = 100000; 

在 VS2022 上運行結果如下圖: 

可以看到數據量越大,方案 2 的性能越高。 

選擇建議

  • 低競爭場景:方案 1(互斥鎖)簡單可靠。
  • 高并發寫入:方案 2(原子索引)性能更優。
  • 允許最終一致性:方案 3(線程本地存儲)避免鎖爭用。
責任編輯:趙寧寧 來源: CppPlayer
相關推薦

2025-06-09 07:55:00

C++引用語言

2024-09-26 08:03:25

2021-10-27 11:00:30

C++語言面試

2015-09-02 09:32:56

java線程面試

2025-05-27 10:15:00

void*函數開發

2025-01-09 12:00:00

JavaScript前端數組

2025-05-23 08:15:00

C++constexpr字面類型

2021-08-13 07:56:13

MongoDBScrapy元素

2010-01-28 13:45:06

C++數組

2020-11-05 10:01:35

系統設計軟件

2025-05-26 03:20:00

2018-12-03 09:42:32

Java程序員阿里面試

2009-09-08 09:59:26

LINQ遍歷多個數組

2025-05-27 08:10:00

Go數組Map

2025-05-20 10:00:00

C++命名空間別名代碼

2021-10-28 11:40:58

回文鏈表面試題數據結構

2011-03-29 14:31:41

CC++

2025-04-30 10:10:00

在 C++C++11Lambda

2013-09-10 14:50:12

數組面試題

2010-01-20 10:19:55

C++數組
點贊
收藏

51CTO技術棧公眾號

精品少妇v888av| 一本到不卡免费一区二区| 国产精自产拍久久久久久蜜| 激情五月激情综合| 69精品国产久热在线观看| 午夜欧美大尺度福利影院在线看| 狼狼综合久久久久综合网| 一区二区三区免费观看视频| 激情综合久久| 色婷婷综合久久久久| 国产人妻精品午夜福利免费| 精品免费av在线| 亚洲一区二区三区在线播放| 日韩精品久久久毛片一区二区| 国产免费黄色录像| 久久精品一区| 欧美日韩国产二区| 一级在线观看视频| 久久久久高潮毛片免费全部播放| 欧美视频精品在线| 精品久久一二三| av激情在线| 国产亚洲一区二区三区在线观看| 99视频网站| 在线观看毛片网站| 鲁大师影院一区二区三区| 欧美大胆在线视频| 一级特黄曰皮片视频| 黄色欧美在线| 欧美成人性战久久| 欧美美女性视频| 日韩伦理三区| 五月婷婷激情综合| 波多野结衣 作品| 在线观看免费网站黄| 91视频在线观看免费| 国产精品二区三区四区| 国产内射老熟女aaaa∵| 蜜桃精品视频在线观看| 日本成人激情视频| 亚洲 欧美 成人| 夜夜嗨一区二区三区| 欧美国产日韩一区二区在线观看| 欧美自拍偷拍网| 精品国产一区二区三区小蝌蚪 | 深夜黄色小视频| 亚洲黄色网址| 欧美日韩国产精品| 久久黄色片视频| 黄色激情在线播放| 亚洲成人动漫精品| 日韩人妻无码精品久久久不卡| yellow91字幕网在线| |精品福利一区二区三区| 亚洲欧美国产一区二区| freemovies性欧美| 国产精品欧美经典| 一区二区三区不卡在线| 久草资源在线观看| 综合色中文字幕| 中文字幕中文字幕在线中一区高清 | 亚洲第一二三四五区| 熟妇高潮一区二区| 爱爱精品视频| 精品va天堂亚洲国产| 成人免费看片载| 久久国产精品色av免费看| 亚洲黄一区二区| 播金莲一级淫片aaaaaaa| 国产99久久久国产精品成人免费| 亚洲网在线观看| 久久久精品成人| 91精品蜜臀一区二区三区在线| 日韩中文字幕欧美| 久久免费精彩视频| 一本色道88久久加勒比精品| 日本午夜人人精品| 亚洲天堂网视频| 国产精品白丝jk白祙喷水网站| 亚洲永久免费观看| 亚洲美女性生活| 91在线国产观看| 涩涩日韩在线| 18视频在线观看网站| 亚洲成人动漫在线观看| 日本中文字幕片| 亚洲日本免费电影| 精品国产乱码久久久久久久| 精品夜夜澡人妻无码av| 久久在线视频| 欧美黑人性视频| 黄色一级片免费在线观看| 久久精品国产免费看久久精品| 99se婷婷在线视频观看| 九色视频在线观看免费播放 | 国产亚洲欧美久久久久| 老司机精品久久| 91在线免费观看网站| 欧美视频xxx| 国产精品色哟哟| 美女扒开大腿让男人桶| 在线成人视屏| 欧美精品一区二区三区高清aⅴ | 精品国产乱码久久久久久蜜坠欲下 | 久久久久久久久岛国免费| 亚洲欧美日韩综合一区| 日本三级在线观看网站| 在线这里只有精品| 亚洲成a人无码| 久久免费大视频| 欧美一级大片在线观看| 精品国精品国产自在久不卡| 久久久久综合网| 男人天堂新网址| 福利精品一区| 精品99999| 三级影片在线看| 日本欧美一区二区| 久久伦理网站| av手机在线观看| 日韩女优视频免费观看| 精品伦精品一区二区三区视频密桃| 亚洲韩日在线| 成人免费在线一区二区三区| 在线免费看av| 色八戒一区二区三区| 永久免费未满蜜桃| 亚洲精品888| 国产精品自产拍在线观看中文 | 91视频91自| 国产91沈先生在线播放| 国产精品亚洲综合在线观看 | 欧美精品久久久久久久多人混战 | 日韩av手机版| 亚洲精品动态| 欧美诱惑福利视频| 污污的视频网站在线观看| 亚洲一区免费在线观看| 黄色片子免费看| 五月天久久777| 国产美女久久精品香蕉69| 国产主播福利在线| 色菇凉天天综合网| 色欲AV无码精品一区二区久久| 亚洲欧美日韩在线观看a三区| 精品国产一区二区三区麻豆小说 | 春暖花开成人亚洲区| 精品国产乱码久久久久久天美| 一二三区视频在线观看| 欧美激情麻豆| 99re资源| 成人性生交大片免费看网站| 精品捆绑美女sm三区| 久久久久久av无码免费网站| 丁香婷婷综合网| 日韩精品一区在线视频| 成人精品毛片| 国产91精品久| 蜜桃免费在线| 91黄视频在线观看| 调教驯服丰满美艳麻麻在线视频| 免费国产亚洲视频| 中文字幕免费在线不卡| 成人51免费| 九九久久国产精品| 亚洲精品18在线观看| 精品久久久一区| 熟女少妇内射日韩亚洲| 久久精品国产一区二区三 | 污视频网站在线免费| 精品黑人一区二区三区久久| 日韩黄色一级大片| 国产午夜亚洲精品午夜鲁丝片| 激情 小说 亚洲 图片: 伦| 成人在线免费观看91| 成人h猎奇视频网站| 综合网在线观看| 中文字幕av一区二区三区四区| 久久久久女教师免费一区| 五月婷婷六月色| 欧洲av一区二区嗯嗯嗯啊| 国产精品嫩草影院俄罗斯| 国产69精品一区二区亚洲孕妇 | 国产黄色片在线| 国产黑丝在线一区二区三区| 玩弄中年熟妇正在播放| 久久伦理在线| 国产精品乱码视频| 新片速递亚洲合集欧美合集| 久久中国妇女中文字幕| 熟妇高潮一区二区三区| 欧美日韩一级黄| 精品在线视频免费| 国产欧美日韩另类一区| 女同性αv亚洲女同志| 久久三级视频| 91精品国产吴梦梦| 国产videos久久| 粉嫩av免费一区二区三区| 91精品影视| 欧美黄色三级网站| melody高清在线观看| 精品奇米国产一区二区三区| 黄色污污视频软件| 亚洲综合成人在线视频| 成人无码精品1区2区3区免费看 | 久久亚洲综合网| 国产一区二区三区免费在线 | 国产亚洲综合av| 成年女人免费视频| 国产原创一区二区| 成人性做爰aaa片免费看不忠| 国产综合自拍| 国产精品美女在线播放| 国产不卡av一区二区| 国产女主播一区二区| 国产麻豆一区二区三区| 国产精品第2页| 欧美aa在线观看| 欧美乱妇40p| 久操视频在线免费播放| 亚洲男人天堂2024| 日韩在线观看视频一区| 91精品国产一区二区| 少妇又紧又色又爽又刺激视频| 欧美日韩一区二区精品| 国产午夜视频在线播放| 亚洲女与黑人做爰| 老司机深夜福利网站| 国产亚洲一区二区在线观看| 国产精品无码毛片| 成人动漫一区二区三区| 日本人dh亚洲人ⅹxx| 激情伊人五月天久久综合| 最新中文字幕免费视频| 视频一区二区三区中文字幕| 亚洲 欧美 日韩 国产综合 在线 | 777久久久精品一区二区三区| 欧美精品福利| av 日韩 人妻 黑人 综合 无码| 亚州av乱码久久精品蜜桃| 亚洲天堂电影网| 日韩片欧美片| 亚洲图片都市激情| 五月精品视频| 米仓穗香在线观看| 女主播福利一区| 国产 欧美 日本| 黄色成人在线网址| 国产精品专区在线| 亚洲美女视频在线免费观看| 欧美 日韩 国产 高清| 亚洲三级色网| 能在线观看的av| 久久久久久久欧美精品| 久久久久久三级| 日本不卡高清视频| 57pao国产成永久免费视频| 久久99精品久久久| 国产精品19p| a在线播放不卡| 少妇精品一区二区三区| 久久精品视频在线看| 日本人亚洲人jjzzjjz| 国产精品乱码妇女bbbb| 四虎免费在线视频| 亚洲444eee在线观看| 成人午夜视频在线播放| 欧美亚洲综合久久| 国产女主播福利| 亚洲大胆美女视频| 国产中文字幕在线看| 久久久精品美女| www在线观看黄色| 国产成人拍精品视频午夜网站| 91p九色成人| 亚洲va欧美va国产综合剧情| 丁香综合av| 欧美一区二区高清在线观看| 99久久婷婷| 国产av熟女一区二区三区| 久久精品亚洲| 三级性生活视频| 97精品久久久午夜一区二区三区| 黄免费在线观看| 亚洲乱码国产乱码精品精98午夜| 日本熟女一区二区| 欧美日韩一区三区四区| www.激情五月| 国产午夜精品全部视频播放| 黄色小网站在线观看| 97色伦亚洲国产| 日本a人精品| 久久国产精品久久| 99精品一区| 国产精品秘入口18禁麻豆免会员| 麻豆久久久久久| 在线免费观看a级片| 一区在线中文字幕| 亚洲黄色小说图片| 91精选在线观看| 久香视频在线观看| 久久97久久97精品免视看| 日韩不卡在线| 久久av一区二区三区亚洲| 欧美gayvideo| 国产精品97在线| 国产黄色精品网站| 99久久99久久精品免费| 图片区小说区国产精品视频| 精品国产青草久久久久96| 亚洲第一福利在线观看| 国产在线观看免费麻豆| 日本久久亚洲电影| 一区中文字幕电影| 在线观看日韩片| 老司机精品导航| 国产精品无码一区二区三区免费 | 人妻av中文系列| 国产精品影视在线观看| 少妇av片在线观看| 精品久久久久久久久久久久久久| www.超碰在线.com| 欧美xxxx做受欧美| 国产一区影院| 日韩一区二区电影在线观看| 99国产精品自拍| 性高潮久久久久久| 亚洲免费观看高清完整版在线 | 国产直播在线| 国产成人av一区二区三区| 这里只有精品在线| 日韩av一卡二卡三卡| 亚洲欧美中日韩| 一级黄色大毛片| 中文字幕视频在线免费欧美日韩综合在线看| 国产黄大片在线观看| 丁香五月网久久综合| 欧美一区视频| a级大片免费看| 亚洲欧美另类图片小说| 97人妻精品一区二区三区软件 | 日本中文字幕一区| 蜜桃传媒一区二区亚洲| 日本高清不卡在线观看| 黄色在线小视频| 国产精品成人aaaaa网站| 视频精品在线观看| 蜜臀视频一区二区三区| 国产日韩成人精品| 一区二区三区麻豆| 中文字幕日韩视频| 宅男噜噜噜66国产精品免费| 黄瓜视频免费观看在线观看www| 乱一区二区av| 国产又粗又硬又长又爽| 欧美一级黄色大片| 91九色porn在线资源| 国产日本一区二区三区| 国产一区二区精品| 男人舔女人下部高潮全视频| 欧美网站大全在线观看| 黄色网页在线免费看| 亚洲一区二区三区四区视频| 国语自产精品视频在线看8查询8| 性感美女一区二区三区| 欧美视频在线免费| av在线资源站| 97超碰资源| 国产亚洲精品久久久久婷婷瑜伽| 日韩av在线看免费观看| 欧美日韩午夜在线| 国产欧美黑人| 国产一区精品在线| 日韩av电影免费观看高清完整版| 51精品免费网站| 亚洲国产精品成人精品| 欧美极品免费| 超碰97在线看| 91色乱码一区二区三区| 中文字幕一区二区在线视频| 九九热最新视频//这里只有精品 | 久久av喷吹av高潮av| 福利91精品一区二区三区| 在线天堂中文字幕| www.xxxx精品| 国产精品玖玖玖在线资源| 欧美精品成人网| 一区二区成人在线观看| 国产永久免费高清在线观看| 成人网在线视频| 国产模特精品视频久久久久| 日本激情视频一区二区三区| 亚洲国产成人久久| 精品美女一区| 俄罗斯av网站| 亚洲视频网在线直播| 免费在线高清av| 91丨九色丨国产| 免费观看日韩av|