c++14读写锁

接触到一段读写锁代码是用pthread.h实现的,我就在想如何在windows系统上使用读写锁呢。我查阅资料发现c++14就可以使用shared_mutex和mutex实现读写锁,没必要再进行封装了。
linux下使用pthread封装的读写锁

#include <pthread.h>
#include <memory>
#include <utility>

	class RwLock {
	public:
		RwLock() { pthread_rwlock_init(&rwlock, NULL); }
		~RwLock() { pthread_rwlock_destroy(&rwlock); }
		void wrlock() { pthread_rwlock_wrlock(&rwlock); }
		void rdlock() { pthread_rwlock_rdlock(&rwlock); }
		void unlock() { pthread_rwlock_unlock(&rwlock); }

	private:
		pthread_rwlock_t rwlock;
	};

	class RwLockWriteGuard {
	public:
		explicit RwLockWriteGuard(RwLock& lock) : lock_(lock) { lock_.wrlock(); }
		~RwLockWriteGuard() { lock_.unlock(); }

	private:
		RwLock& lock_;
	};

	class RwLockReadGuard {
	public:
		explicit RwLockReadGuard(RwLock& lock) : lock_(lock) { lock_.rdlock(); }
		~RwLockReadGuard() { lock_.unlock(); }

	private:
		RwLock& lock_;
	};

c++14后来的读写锁可以这样做

这里有个简单的示范
其实道理就是 读锁时用std::shared_lockstd::shared_mutex
而写锁独占 使用 std::unique_lockstd::shared_mutex
这样就是可以进行读写锁了
读写锁例子

class ThreadSafeCounter {
 public:
  ThreadSafeCounter() = default;
 
  // 多个线程/读者能同时读计数器的值。
  unsigned int get() const {
    std::shared_lock<std::shared_mutex> lock(mutex_);
    return value_;
  }
 
  // 只有一个线程/写者能增加/写线程的值。
  void increment() {
    std::unique_lock<std::shared_mutex> lock(mutex_);
    value_++;
  }
 
  // 只有一个线程/写者能重置/写线程的值。
  void reset() {
    std::unique_lock<std::shared_mutex> lock(mutex_);
    value_ = 0;
  }
 
 private:
  mutable std::shared_mutex mutex_;
  unsigned int value_ = 0;
};
posted @ 2021-03-24 16:31  cyssmile  阅读(1292)  评论(0)    收藏  举报