diff --git a/modules/terrain/shared_mutex.cpp b/modules/terrain/shared_mutex.cpp index 0a5971e4..f52564a0 100644 --- a/modules/terrain/shared_mutex.cpp +++ b/modules/terrain/shared_mutex.cpp @@ -28,6 +28,16 @@ void SharedMutex::unlock_exclusive() { this->lock.unlock(); } +bool SharedMutex::is_locked() { + if (this->lock.try_lock()) { + bool locked{ this->shared_count != 0 }; + this->lock.unlock(); + return locked; + } else { + return false; + } +} + SharedMutex::LockExclusive::LockExclusive(SharedMutex &mutex) : mtx{ mutex } { this->mtx.lock_exclusive(); } diff --git a/modules/terrain/shared_mutex.h b/modules/terrain/shared_mutex.h index fcb0e6bd..3f47f998 100644 --- a/modules/terrain/shared_mutex.h +++ b/modules/terrain/shared_mutex.h @@ -7,10 +7,11 @@ struct SharedMutex { void unlock_shared(); void lock_exclusive(); void unlock_exclusive(); + bool is_locked(); private: - Mutex lock{}; - int shared_count{}; + BinaryMutex lock{}; + unsigned shared_count{}; public: class LockExclusive {