C++17 才支持share_lock。
低版本的需要自己实现。
以下基于C++11实现。
源码的地址:https://github.com/SaberMqd/naive/blob/master/include/naive/share_lock.h
#ifndef _NAIVE_SHARE_LOCK_H_
#define _NAIVE_SHARE_LOCK_H_
#ifdef _WIN32
#include <shared_mutex>
#else
#include <mutex>
#include <condition_variable>
#include <atomic>
#endif
namespace naive {
#ifdef _WIN32
class ShareLock
{
public:
ShareLock() {
}
void Lock() {
_mtx.lock();
}
void UnLock() {
_mtx.unlock();
}
void LockShared() {
_mtx.lock_shared();
}
void UnLockShared() {
_mtx.unlock_shared();
}
~ShareLock() {
}
private:
std::shared_mutex _mtx;
};
#else
class ShareLock
{
public:
ShareLock() : _pv(0), _writing(false), _hasWriting(false){ }
void LockShared() {
std::unique_lock<std::m