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

C++?實現(xiàn)讀寫鎖的代碼詳解

 更新時間:2023年10月19日 08:46:09   作者:Respect@  
C++讀寫鎖是一種多線程同步機制,它允許多個線程同時讀取共享數(shù)據,但只允許一個線程寫入共享數(shù)據,這種鎖可以提高程序的并發(fā)性和性能,本文給大家介紹了C++?實現(xiàn)讀寫鎖的代碼,需要的朋友可以參考下

下面是一個簡單的 C++ 實現(xiàn)讀寫鎖的示例:

#include <iostream>
#include <mutex>
#include <condition_variable>

class ReadWriteLock {
private:
    std::mutex mutex_;
    std::condition_variable read_cv_;
    std::condition_variable write_cv_;
    int readers_;
    bool writing_;

public:
    ReadWriteLock() : readers_(0), writing_(false) {}

    void lockRead() {
        std::unique_lock<std::mutex> lock(mutex_);
        // 如果有線程正在進行寫操作或者等待寫操作,則阻塞等待
        while (writing_) {
            read_cv_.wait(lock);
        }
        readers_++;
    }

    void unlockRead() {
        std::unique_lock<std::mutex> lock(mutex_);
        readers_--;
        if (readers_ == 0) {
            write_cv_.notify_one(); // 喚醒等待寫操作的線程
        }
    }

    void lockWrite() {
        std::unique_lock<std::mutex> lock(mutex_);
        // 如果有線程正在讀或寫,則阻塞等待
        while (writing_ || readers_ > 0) {
            write_cv_.wait(lock);
        }
        writing_ = true;
    }

    void unlockWrite() {
        std::unique_lock<std::mutex> lock(mutex_);
        writing_ = false;
        read_cv_.notify_all();  // 喚醒等待讀操作的線程
        write_cv_.notify_one(); // 喚醒等待寫操作的線程
    }
};

// 示例用法
ReadWriteLock rwLock;

void readerFunction(int id) {
    while (true) {
        rwLock.lockRead();
        // 執(zhí)行讀取操作
        std::cout << "Reader " << id << " is reading" << std::endl;
        rwLock.unlockRead();
        // 休眠一段時間模擬讀取過程
        std::this_thread::sleep_for(std::chrono::milliseconds(1000));
    }
}

void writerFunction(int id) {
    while (true) {
        rwLock.lockWrite();
        // 執(zhí)行寫入操作
        std::cout << "Writer " << id << " is writing" << std::endl;
        rwLock.unlockWrite();
        // 休眠一段時間模擬寫入過程
        std::this_thread::sleep_for(std::chrono::milliseconds(2000));
    }
}

int main() {
    // 創(chuàng)建多個讀者線程和寫者線程進行測試
    std::thread readers[3];
    std::thread writers[2];

    for (int i = 0; i < 3; i++) {
        readers[i] = std::thread(readerFunction, i);
    }

    for (int i = 0; i < 2; i++) {
        writers[i] = std::thread(writerFunction, i);
    }

    // 等待所有線程結束
    for (auto& reader : readers) {
        reader.join();
    }

    for (auto& writer : writers) {
        writer.join();
    }

    return 0;
}

在上述示例中,ReadWriteLock 類實現(xiàn)了讀寫鎖的基本功能。lockRead() 和 unlockRead() 方法用于獲取和釋放讀鎖,lockWrite() 和 unlockWrite() 方法用于獲取和釋放寫鎖。

在主函數(shù)中,創(chuàng)建了多個讀者線程和寫者線程來模擬并發(fā)讀寫操作。讀者線程使用 lockRead() 和 unlockRead() 獲取和釋放讀鎖,寫者線程使用 lockWrite() 和 unlockWrite() 獲取和釋放寫鎖。

通過使用互斥量(std::mutex)、條件變量(std::condition_variable)以及共享的計數(shù)器和標志位來實現(xiàn)讀寫鎖的功能,并確保讀者和寫者之間的互斥和同步。

到此這篇關于C++ 實現(xiàn)讀寫鎖的代碼詳解的文章就介紹到這了,更多相關C++ 實現(xiàn)讀寫鎖內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 實例解析C++設計模式編程中簡單工廠模式的采用

    實例解析C++設計模式編程中簡單工廠模式的采用

    這篇文章主要介紹了C++設計模式編程中簡單工廠模式的采用實例,在簡單工廠模式中程序往往利用封裝繼承來降低耦合度,需要的朋友可以參考下
    2016-03-03
  • C++?如何使用棧求解中綴、后綴表達式的值

    C++?如何使用棧求解中綴、后綴表達式的值

    這篇文章主要介紹了C++?使用棧求解中綴、后綴表達式的值,本文講解了中綴、后綴表達式的求值過程以及如何將一個中綴表達式轉換成后綴表達式,需要的朋友可以參考下
    2022-10-10
  • 解析C++編程中virtual聲明的虛函數(shù)以及單個繼承

    解析C++編程中virtual聲明的虛函數(shù)以及單個繼承

    這篇文章主要介紹了C++編程中virtual聲明的虛函數(shù)以及單個繼承,剖析虛函數(shù)和單個基類所能夠繼承的成員,要的朋友可以參考下
    2016-01-01
  • Qt中MVD模式的具體使用

    Qt中MVD模式的具體使用

    本文主要介紹了Qt中MVD模式的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-03-03
  • C語言實現(xiàn)魔方比賽管理系統(tǒng)

    C語言實現(xiàn)魔方比賽管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)魔方比賽管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C語言基礎之malloc和free函數(shù)詳解

    C語言基礎之malloc和free函數(shù)詳解

    這篇文章主要介紹了C語言基礎之malloc和free函數(shù)詳解的相關資料,需要的朋友可以參考下
    2017-04-04
  • C++實現(xiàn)俄羅斯方塊源碼

    C++實現(xiàn)俄羅斯方塊源碼

    這篇文章主要為大家詳細介紹了C++實現(xiàn)俄羅斯方塊源碼完整版,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • 使用C++和Crypto++庫實現(xiàn)AES加密與解密

    使用C++和Crypto++庫實現(xiàn)AES加密與解密

    在這篇博客中,我們將深入探討如何利用C++和Crypto++庫實現(xiàn)高效且安全的AES加密與解密機制,Crypto++是一款高度認可的免費C++類庫,文中通過代碼示例介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2024-01-01
  • C語言實現(xiàn)稀疏矩陣

    C語言實現(xiàn)稀疏矩陣

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)稀疏矩陣的代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • C++關鍵字typename的深入理解

    C++關鍵字typename的深入理解

    本篇文章是對C++中的關鍵字typename進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05

最新評論

桂东县| 武夷山市| 辽阳县| 武宁县| 当涂县| 榆社县| 凤城市| 玉溪市| 鸡西市| 北宁市| 陇川县| 左权县| 扶绥县| 时尚| 平原县| 岚皋县| 凤山县| 札达县| 夏邑县| 成武县| 旅游| 荃湾区| 舞阳县| 加查县| 阜平县| 吉木萨尔县| 施甸县| 集贤县| 海兴县| 璧山县| 翁牛特旗| 抚松县| 阆中市| 漳浦县| 凤台县| 唐河县| 天长市| 沂南县| 莱芜市| 新沂市| 新和县|