39 lines
795 B
C++
39 lines
795 B
C++
#pragma once
|
|
|
|
#include "core/os/mutex.h"
|
|
|
|
struct SharedMutex {
|
|
void lock_shared();
|
|
void unlock_shared();
|
|
void lock_exclusive();
|
|
void unlock_exclusive();
|
|
bool is_locked();
|
|
|
|
private:
|
|
BinaryMutex lock{};
|
|
unsigned shared_count{};
|
|
|
|
public:
|
|
class LockExclusive {
|
|
SharedMutex &mtx;
|
|
|
|
public:
|
|
explicit LockExclusive(SharedMutex &mtx);
|
|
~LockExclusive();
|
|
LockExclusive() = delete;
|
|
LockExclusive(LockExclusive &) = delete;
|
|
LockExclusive(LockExclusive &&) = delete;
|
|
LockExclusive &operator=(LockExclusive &) = delete;
|
|
};
|
|
class LockShared {
|
|
SharedMutex &mtx;
|
|
|
|
public:
|
|
explicit LockShared(SharedMutex &mtx);
|
|
~LockShared();
|
|
LockShared() = delete;
|
|
LockShared(LockShared &) = delete;
|
|
LockShared(LockShared &&) = delete;
|
|
LockShared &operator=(LockShared &) = delete;
|
|
};
|
|
};
|