11#include <promeki/config.h>
12#if PROMEKI_ENABLE_CORE
13#include <shared_mutex>
16PROMEKI_NAMESPACE_BEGIN
42 ReadLocker(ReadWriteLock &lock) : _lock(lock) { _lock.lockForRead(); }
45 ~ReadLocker() { _lock.unlock(); }
47 ReadLocker(
const ReadLocker &) =
delete;
48 ReadLocker &operator=(
const ReadLocker &) =
delete;
49 ReadLocker(ReadLocker &&) =
delete;
50 ReadLocker &operator=(ReadLocker &&) =
delete;
65 WriteLocker(ReadWriteLock &lock) : _lock(lock) { _lock.lockForWrite(); }
68 ~WriteLocker() { _lock.unlock(); }
70 WriteLocker(
const WriteLocker &) =
delete;
71 WriteLocker &operator=(
const WriteLocker &) =
delete;
72 WriteLocker(WriteLocker &&) =
delete;
73 WriteLocker &operator=(WriteLocker &&) =
delete;
80 ReadWriteLock() =
default;
83 ~ReadWriteLock() =
default;
85 ReadWriteLock(
const ReadWriteLock &) =
delete;
86 ReadWriteLock &operator=(
const ReadWriteLock &) =
delete;
87 ReadWriteLock(ReadWriteLock &&) =
delete;
88 ReadWriteLock &operator=(ReadWriteLock &&) =
delete;
91 void lockForRead() { _mutex.lock_shared(); }
94 void lockForWrite() { _mutex.lock(); }
97 void unlock() { _mutex.unlock(); }
103 bool tryLockForRead() {
return _mutex.try_lock_shared(); }
109 bool tryLockForWrite() {
return _mutex.try_lock(); }
112 std::shared_mutex _mutex;