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

C++ std::shared_mutex讀寫鎖的使用

 更新時(shí)間:2022年03月15日 14:31:51   作者:龔建波  
本文主要介紹了C++ std::shared_mutex讀寫鎖的使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

0.前言

讀寫鎖把對共享資源的訪問者劃分成讀者和寫者,讀者只對共享資源進(jìn)行讀訪問,寫者則需要對共享資源進(jìn)行寫操作。C++17開始,標(biāo)準(zhǔn)庫提供了shared_mutex類(在這之前,可以使用boost的shared_mutex類或系統(tǒng)相關(guān)api)。和其他便于獨(dú)占訪問的互斥類型不同,shared_mutex 擁有兩個(gè)訪問級別:

  • 共享:多個(gè)線程能共享同一互斥的所有權(quán)(如配合shared_lock);
  • 獨(dú)占:僅有一個(gè)線程能占有互斥(如配合lock_guard、unique_lock)。

shared_mutex 通常用于多個(gè)讀線程能同時(shí)訪問同一資源而不導(dǎo)致數(shù)據(jù)競爭,但只有一個(gè)寫線程能訪問的情形。

1.認(rèn)識std::shared_mutex

通過查看該類的接口(https://zh.cppreference.com/w/cpp/thread/shared_mutex),可以看到,該類除了互斥鎖定接口,還提供了共享鎖定接口。

  • lock() 鎖定互斥。若另一線程已鎖定互斥,則到 lock() 的調(diào)用將阻塞執(zhí)行,直至獲得鎖??梢杂?std::lock_guard 和 std::unique_lock 管理互斥鎖定。
  • shared_lock() 獲得互斥的共享所有權(quán)。若另一線程以排他性所有權(quán)保有互斥,則到 shared_lock() 的調(diào)用將阻塞執(zhí)行,直到能取得共享所有權(quán)。若已以任何模式(排他性或共享)占有 mutex 的線程調(diào)用 shared_lock() ,則行為未定義。若多于實(shí)現(xiàn)定義最大數(shù)量的共享所有者已以共享模式鎖定互斥,則 shared_lock() 阻塞執(zhí)行,直至共享所有者的數(shù)量減少。所有者的最大數(shù)量保證至少為 10000 。可以用std::shared_lock管理共享鎖定。

2.實(shí)例演示

這里直接借用在線手冊上的例子:

#include <iostream>
//std::unique_lock
#include <mutex> 
#include <shared_mutex>
#include <thread>
 
class ThreadSafeCounter {
public:
    ThreadSafeCounter() = default;
 
    // 多個(gè)線程/讀者能同時(shí)讀計(jì)數(shù)器的值。
    unsigned int get() const {
        std::shared_lock<std::shared_mutex> lock(mutex_);
        return value_;
    }
 
    // 只有一個(gè)線程/寫者能增加/寫線程的值。
    void increment() {
        std::unique_lock<std::shared_mutex> lock(mutex_);
        value_++;
    }
 
    // 只有一個(gè)線程/寫者能重置/寫線程的值。
    void reset() {
        std::unique_lock<std::shared_mutex> lock(mutex_);
        value_ = 0;
    }
 
private:
    mutable std::shared_mutex mutex_;
    unsigned int value_ = 0;
};
 
int main() {
    ThreadSafeCounter counter;
 
    auto increment_and_print = [&counter]() {
        for (int i = 0; i < 3; i++) {
            counter.increment();
            std::cout << std::this_thread::get_id() << '\t' << counter.get() << std::endl;
        }
    };
 
    std::thread thread1(increment_and_print);
    std::thread thread2(increment_and_print);
 
    thread1.join();
    thread2.join();
 
    system("pause");
    return 0;
}

到此這篇關(guān)于C++ std::shared_mutex讀寫鎖的使用的文章就介紹到這了,更多相關(guān)C++ std::shared_mutex讀寫鎖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Jsoncpp的安裝與使用方式

    Jsoncpp的安裝與使用方式

    JsonCpp是一個(gè)用于解析和生成JSON數(shù)據(jù)的C++庫,它支持解析JSON文件或字符串到C++對象,以及將C++對象序列化回JSON格式,安裝JsonCpp可以通過命令安裝,默認(rèn)安裝動(dòng)態(tài)庫,JsonCpp的使用主要涉及三個(gè)類:Json::Value用于表示JSON值
    2025-01-01
  • C++實(shí)現(xiàn)將數(shù)據(jù)寫入Excel工作表的示例代碼

    C++實(shí)現(xiàn)將數(shù)據(jù)寫入Excel工作表的示例代碼

    直觀的界面、出色的計(jì)算功能和圖表工具,使Excel成為最流行的個(gè)人計(jì)算機(jī)數(shù)據(jù)處理軟件。在本文中,您將學(xué)習(xí)如何使用?Spire.XLS?for?C++?創(chuàng)建?Excel?文檔,以及如何將數(shù)據(jù)寫入?Excel?工作表
    2023-03-03
  • C語言淺析指針的使用

    C語言淺析指針的使用

    C語言這門課程在計(jì)算機(jī)的基礎(chǔ)教學(xué)中一直占有比較重要的地位,然而要想突破C語言的學(xué)習(xí),對指針的掌握是非常重要的,本文將具體針對指針的基礎(chǔ)做詳盡的介紹
    2022-07-07
  • C++中的運(yùn)算符和表達(dá)式

    C++中的運(yùn)算符和表達(dá)式

    這篇文章主要介紹了C++中的運(yùn)算符和表達(dá)式,學(xué)習(xí)使用表達(dá)式,對數(shù)據(jù)類型進(jìn)行處理.詳細(xì)介紹內(nèi)容需要的小伙伴可以參考下面文章相關(guān)內(nèi)容
    2022-03-03
  • 5分鐘內(nèi)了解C語言的指針

    5分鐘內(nèi)了解C語言的指針

    這篇文章主要介紹了5分鐘內(nèi)了解C語言的指針,本文講解了指針、引用和取值、void指針、NULL指針和未初始化指針、指針和數(shù)組等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • C 語言基礎(chǔ)教程(我的C之旅開始了)[三]

    C 語言基礎(chǔ)教程(我的C之旅開始了)[三]

    C 語言基礎(chǔ)教程(我的C之旅開始了)[三]...
    2007-02-02
  • 一文帶你掌握C++中的移動(dòng)語義和完美轉(zhuǎn)發(fā)

    一文帶你掌握C++中的移動(dòng)語義和完美轉(zhuǎn)發(fā)

    這篇文章主要為大家詳細(xì)介紹了C++中的移動(dòng)語義和完美轉(zhuǎn)發(fā)的相關(guān)知識,文中的示例代碼講解詳細(xì),對我們深入掌握C++有一定的幫助,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • C++ 實(shí)現(xiàn)即時(shí)通信的示例代碼(直接運(yùn)行)

    C++ 實(shí)現(xiàn)即時(shí)通信的示例代碼(直接運(yùn)行)

    本文主要介紹了C++ 實(shí)現(xiàn)即時(shí)通信的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 使用C語言繪制統(tǒng)計(jì)圖中的餅圖

    使用C語言繪制統(tǒng)計(jì)圖中的餅圖

    常用的統(tǒng)計(jì)圖有條形圖、柱形圖、折線圖、曲線圖、餅圖、環(huán)形圖、扇形圖,本文主要為大家詳細(xì)介紹了如何使用使用C語言繪制統(tǒng)計(jì)圖中的餅圖,希望對大家有所幫助
    2024-02-02
  • QT調(diào)用vs2019生成的c++動(dòng)態(tài)庫的方法實(shí)現(xiàn)

    QT調(diào)用vs2019生成的c++動(dòng)態(tài)庫的方法實(shí)現(xiàn)

    本文主要介紹了QT調(diào)用vs2019生成的c++動(dòng)態(tài)庫的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06

最新評論

秦安县| 阳朔县| 乌鲁木齐市| 双柏县| 侯马市| 延寿县| 分宜县| 新野县| 新乐市| 甘孜县| 饶平县| 高平市| 保康县| 福贡县| 延吉市| 余姚市| 乃东县| 黄浦区| 开封市| 澎湖县| 二手房| 石狮市| 长葛市| 福清市| 潮州市| 黑龙江省| 康定县| 资阳市| 临海市| 尼玛县| 平和县| 宁城县| 当阳市| 万荣县| 久治县| 砚山县| 岳普湖县| 泾阳县| 禹州市| 三门峡市| 黔南|