terrain-module/shared_mutex.h
2026-04-19 14:56:17 +02:00

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