Note: C++ 17里已经引进了读写锁 std::shared_mutex , 其lock()即以写方式加锁, 其lock_shared()即以读方式加锁。
https://en.cppreference.com/w/cpp/thread/shared_mutex
实现一个读写锁类, 可以有两种方式获取锁,读方式,写方式。 允许多个"读线程"同时进入临界区,但是同一时刻只允许一个"写线程"进入临界区。
当有写线程进入临界区时,不允许任何其他读或写线程同时进入。 写线程优先。
方法:
在类中增加成员, 记录当前正在临界区的“读线程”,"写线程"数目, 等待进入临界区的“读线程”,"写线程"数目。
增加2个信号量成员 用于"写线程"的等待和唤醒, 用于“读线程”的等待和唤醒。
常用场景:
多个读线程频繁访问临界区,偶尔有一个写线程进入临界区。
C++11 实现:
#pragma once
#include <iostream>
#include <thread>
#include <mutex>
#include <list>
#include <cstdlib>
#include <vector>
using namespace std;
clas