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;
};

浙公网安备 33010602011771号