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

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

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

下面是一個(gè)簡單的 C++ 實(shí)現(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_);
        // 如果有線程正在進(jìn)行寫操作或者等待寫操作,則阻塞等待
        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_);
        // 如果有線程正在讀或?qū)?,則阻塞等待
        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();
        // 休眠一段時(shí)間模擬讀取過程
        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();
        // 休眠一段時(shí)間模擬寫入過程
        std::this_thread::sleep_for(std::chrono::milliseconds(2000));
    }
}

int main() {
    // 創(chuàng)建多個(gè)讀者線程和寫者線程進(jìn)行測試
    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);
    }

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

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

    return 0;
}

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

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

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

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

相關(guān)文章

  • 實(shí)例解析C++設(shè)計(jì)模式編程中簡單工廠模式的采用

    實(shí)例解析C++設(shè)計(jì)模式編程中簡單工廠模式的采用

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

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

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

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

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

    Qt中MVD模式的具體使用

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

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

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

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

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

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

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

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

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

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

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

    C++關(guān)鍵字typename的深入理解

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

最新評論

烟台市| 安多县| 扶绥县| 湘潭市| 乐山市| 贵州省| 舞钢市| 昌都县| 华宁县| 澄迈县| 澄城县| 门源| 金塔县| 阿坝县| 罗田县| 安多县| 华安县| 瑞安市| 长阳| 梅州市| 清远市| 同江市| 阿拉尔市| 富宁县| 方正县| 香格里拉县| 奉节县| 河曲县| 海丰县| 尼木县| 汾西县| 湘乡市| 冕宁县| 凉城县| 百色市| 讷河市| 来宾市| 东光县| 永安市| 昌乐县| 惠来县|