1 #include <mutex> 2 3 class readwrite_lock 4 { 5 public: 6 readwrite_lock() : read_cnt(0) 7 { 8 } 9 10 void readLock() 11 { 12 read_mtx.lock(); 13 if (++read_cnt == 1) 14 write_mtx.lock(); 15 read_mtx.unlock(); 16 } 17 18 void readUnlock() 19 { 20 read_mtx.lock(); 21 if (--read_cnt == 0) 22 write_mtx.unlock(); 23 read_mtx.unlock(); 24 } 25 26 void writeLock() 27 { 28 write_mtx.lock(); 29 } 30 31 void writeUnlock() 32 { 33 write_mtx.unlock(); 34 } 35 36 private: 37 mutex read_mtx; 38 mutex write_mtx; 39 int read_cnt; // 已加读锁个数 40 };
读写锁实现
出自datakv