栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++实现读写锁

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++实现读写锁

实现

参考链接:https://blog.csdn.net/ojshilu/article/details/25244389




#include 
#include 
#include 
#include 
#include 
using namespace std;

class Read_Write_Lock{
    private:
        mutex read_mutex;  //其实这个是用来控制 read_mutex_count 的
        mutex write_mutex;
        int read_mutex_count = 0; //写锁肯定是只能有一个,所以只需要记录读锁的个数

    public:
        void readLock(){
            read_mutex.lock();
            //如果加了读锁之后,read_mutex_count的数量刚好为1,
            //这就说明当前资源是无锁状态,要对资源加写锁之后再读
            if(++read_mutex_count == 1){
                write_mutex.lock();
            }
            read_mutex.unlock();
        }

        void readUnLock(){
            read_mutex.lock();
            if(read_mutex_count == 1){
                write_mutex.unlock();
                read_mutex_count-- ;
            }
            read_mutex.unlock();
        }

        void writeLock(){
            write_mutex.lock();
        }

        void writeUnLock(){
            write_mutex.unlock();
        }
};

volatile int var = 10;
Read_Write_Lock rwLock;


void Write() {
    rwLock.writeLock();
    var += 10;
    std::cout<< "tid : " <
    rwLock.readLock();
    std::cout<< "tid: "<
    vector writers;
    vector readers;
    for (int i = 0; i < 10; i++) {  // 10 个写线程
        writers.push_back(std::thread(Write)); 
    }
    for (int i = 0; i < 100; i++) {   // 100 个读线程
        readers.push_back(std::thread(Read));
    }
    for (auto& t : writers) {   // 写线程启动
        t.join();
    }
    for (auto& t : readers) {   // 读线程启动
        t.join();
    }
    std::cin.get();
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/982865.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号