1#ifndef MSTL_CORE_ASYNC_SHARED_MUTEX_HPP__
2#define MSTL_CORE_ASYNC_SHARED_MUTEX_HPP__
33#ifdef MSTL_PLATFORM_WINDOWS__
61 return &shared_mutex_;
69 return &shared_mutex_;
126template <typename SharedMutex>
133 bool owns_lock_ =
false;
150 : mutex_(&m), owns_lock_(true) {
151 mutex_->lock_shared();
172 : mutex_(&m), owns_lock_(m.try_lock_shared()) {}
184 : mutex_(other.mutex_), owns_lock_(other.owns_lock_) {
185 other.mutex_ =
nullptr;
186 other.owns_lock_ =
false;
198 if (owns_lock_) mutex_->unlock_shared();
199 mutex_ = other.mutex_;
200 owns_lock_ = other.owns_lock_;
201 other.mutex_ =
nullptr;
202 other.owns_lock_ =
false;
212 if (owns_lock_) mutex_->unlock_shared();
219 MSTL_NODISCARD
explicit operator bool() const noexcept {
return owns_lock_; }
225 MSTL_NODISCARD
bool owns_lock() const noexcept {
return owns_lock_; }
240 if (owns_lock_)
return;
241 mutex_->lock_shared();
252 if (!owns_lock_)
return;
253 mutex_->unlock_shared();
264 if (!mutex_)
return false;
265 if (owns_lock_)
return true;
266 owns_lock_ = mutex_->try_lock_shared();
MSTL_NODISCARD mutex_type * mutex() const noexcept
获取管理的共享互斥锁指针
SharedMutex mutex_type
共享互斥锁类型
shared_lock(shared_lock &&other) noexcept
移动构造函数
mutex_type * release() noexcept
释放所有权
shared_lock(mutex_type &m, defer_lock_tag tag) noexcept
延迟锁定构造函数
shared_lock()=default
默认构造函数
bool try_lock() noexcept
尝试获取读锁
MSTL_NODISCARD bool owns_lock() const noexcept
检查是否拥有共享锁
shared_lock(mutex_type &m)
从共享互斥锁构造
shared_lock(mutex_type &m, try_lock_tag tag) noexcept
尝试锁定构造函数
native_handle_type * native_handle() noexcept
获取原生句柄
const native_handle_type * native_handle() const noexcept
获取常量原生句柄
::pthread_rwlock_t native_handle_type
共享互斥锁的系统句柄类型
bool try_lock() noexcept
尝试获取写锁
bool try_lock_shared() noexcept
尝试获取读锁
MSTL_NODISCARD constexpr T * addressof(T &x) noexcept
获取对象的地址
#define _MSTL
全局命名空间MSTL前缀
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL