91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2022-03-15 16:52:57 來源:億速云 閱讀:603 作者:iii 欄目:開發技術

這篇“C++的std::shared_mutex讀寫鎖怎么使用”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“C++的std::shared_mutex讀寫鎖怎么使用”文章吧。

0.前言

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

  • 共享:多個線程能共享同一互斥的所有權(如配合shared_lock);

  • 獨占:僅有一個線程能占有互斥(如配合lock_guard、unique_lock)。

shared_mutex 通常用于多個讀線程能同時訪問同一資源而不導致數據競爭,但只有一個寫線程能訪問的情形。

1.認識std::shared_mutex

通過查看該類的接口,可以看到,該類除了互斥鎖定接口,還提供了共享鎖定接口。

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

  • lock() 鎖定互斥。若另一線程已鎖定互斥,則到 lock() 的調用將阻塞執行,直至獲得鎖。可以用 std::lock_guard 和 std::unique_lock 管理互斥鎖定。

  • shared_lock() 獲得互斥的共享所有權。若另一線程以排他性所有權保有互斥,則到 shared_lock() 的調用將阻塞執行,直到能取得共享所有權。若已以任何模式(排他性或共享)占有 mutex 的線程調用 shared_lock() ,則行為未定義。若多于實現定義最大數量的共享所有者已以共享模式鎖定互斥,則 shared_lock() 阻塞執行,直至共享所有者的數量減少。所有者的最大數量保證至少為 10000 。可以用std::shared_lock管理共享鎖定。

2.實例演示

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

#include <iostream>
//std::unique_lock
#include <mutex> 
#include <shared_mutex>
#include <thread>
 
class ThreadSafeCounter {
public:
    ThreadSafeCounter() = default;
 
    // 多個線程/讀者能同時讀計數器的值。
    unsigned int get() const {
        std::shared_lock<std::shared_mutex> lock(mutex_);
        return value_;
    }
 
    // 只有一個線程/寫者能增加/寫線程的值。
    void increment() {
        std::unique_lock<std::shared_mutex> lock(mutex_);
        value_++;
    }
 
    // 只有一個線程/寫者能重置/寫線程的值。
    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;
}

以上就是關于“C++的std::shared_mutex讀寫鎖怎么使用”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

德格县| 宁河县| 江华| 沽源县| 富宁县| 昌都县| 莫力| 宜川县| 黄陵县| 曲麻莱县| 永嘉县| 陆丰市| 诸暨市| 巩留县| 富阳市| 礼泉县| 始兴县| 桓仁| 无为县| 革吉县| 静乐县| 景德镇市| 大理市| 通州区| 古田县| 东莞市| 蒙山县| 墨竹工卡县| 黄陵县| 紫金县| 湄潭县| 安仁县| 旌德县| 唐海县| 乌拉特前旗| 独山县| 富源县| 辽阳市| 清原| 隆回县| 阿荣旗|