美文网首页
c++实现读写锁

c++实现读写锁

作者: 一路向后 | 来源:发表于2021-09-12 21:43 被阅读0次

1.源码实现

#include <iostream>
#include <vector>
#include <string>
#include <thread>
#include <mutex>

using namespace std;

class RWLock {
public:
    RWLock() : rcnt(0){}
    ~RWLock(){}

    void rlock()
    {
        rmtx.lock();

        if(++rcnt == 1)
        {
            wmtx.lock();
        }

        rmtx.unlock();
    }

    void runlock()
    {
        rmtx.lock();

        if(--rcnt == 0)
        {
            wmtx.unlock();
        }

        rmtx.unlock();
    }

    void wlock()
    {
        wmtx.lock();
    }

    void wunlock()
    {
        wmtx.unlock();
    }

private:
    mutex rmtx;
    mutex wmtx;
    int rcnt;
};

volatile int var = 10;
RWLock rwLock;
mutex showLock;

void Write()
{
    rwLock.wlock();
    var += 10;
    showLock.lock();
    cout << "write var: " << var << endl;
    showLock.unlock();
    rwLock.wunlock();
}

void Read()
{
    rwLock.rlock();
    showLock.lock();
    cout << "read var: " << var << endl;
    showLock.unlock();
    rwLock.runlock();
}

int main()
{
    vector<thread> writers;
    vector<thread> readers;

    for(int i=0; i<10; i++)
    {
        writers.push_back(thread(Write));
    }

    for(int i=0; i<20; i++)
    {
        readers.push_back(thread(Read));
    }

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

    for(auto &t : readers)
    {
        t.join();
    }

    return 0;
}

2.编译源码

$ g++ -o example example.cpp -lpthread -std=c++11

3.运行及其结果

$ ./example
write var: 20
write var: 30
write var: 40
write var: 50
write var: 60
write var: 70
write var: 80
read var: 80
read var: 80
read var: 80
read var: 80
write var: 90
read var: 90
read var: 90
read var: 90
read var: 90
read var: 90
read var: 90
read var: 90
read var: 90
read var: 90
read var: 90
read var: 90
read var: 90
read var: 90
read var: 90
read var: 90
read var: 90
write var: 100
write var: 110

相关文章

  • c++实现读写锁

    1.源码实现 2.编译源码 3.运行及其结果

  • 读写锁实现

    读写锁 ReentrantReadWriteLock可重入读写锁(实现ReadWriteLock接口) 使用:Re...

  • Java并发编程-读写锁(ReentrantReadWriteL

    章节目录 ReentrantReadWriteLock 特性 读写锁接口示例 读写锁的实现分析读写状态设计写锁的释...

  • block分析(上)

    读写锁的补充 实现读写锁的两种方案 对底层pthread进行封装 GCD封装 读写锁要实现的功能 多读单写,多读就...

  • Java - ReentrantReadWriteLock的读写

    ReentrantReadWriteLock是可重入读写锁,底层依赖AQS实现,读写锁的竞争通过state的高位和...

  • 17.读写锁ReentrantWriteReadLock

    读写锁ReentrantWriteReadLock,基于AQS的锁机制,实现ReadWriteLock接口。内部有...

  • java锁(7)改进读写锁StampedLock详解

    1、StampedLock特性 StampedLock是JDK 8新增的读写锁,跟读写锁不同,它并不是由AQS实现...

  • 锁2

    5、读写锁 相比Java中的锁(Locks in Java)里Lock实现,读写锁更复杂一些。假设你的程序中涉及到...

  • RWMutex

    前面分析了互斥锁,在针对写少读多的场景,更好的选择是使用读写锁。实现读写锁主要解决下列的问题: 写锁需要阻塞写锁:...

  • 读写锁

    读写锁在 Java 的实现是 ReentrantReadWriteLock,称为可重入读写锁。其与 Reentra...

网友评论

      本文标题:c++实现读写锁

      本文链接:https://www.haomeiwen.com/subject/dbotgltx.html