参考链接: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(); }



