44 lines
685 B
C++
Executable File
44 lines
685 B
C++
Executable File
// License: Modified MIT (NON-AI)
|
|
// See the LICENSE file in the root directory for license information.
|
|
// Copyright 2025 Timothy Prepscius
|
|
|
|
#pragma once
|
|
|
|
namespace tjp::core {
|
|
|
|
template<typename SharedMutex>
|
|
class SharedLockGuard
|
|
{
|
|
private:
|
|
SharedMutex& m;
|
|
bool locked = true;
|
|
|
|
public:
|
|
typedef SharedMutex mutex_type;
|
|
explicit SharedLockGuard(SharedMutex& m_):
|
|
m(m_)
|
|
{
|
|
m.lock_shared();
|
|
}
|
|
|
|
SharedLockGuard(SharedMutex& m_,std::adopt_lock_t):
|
|
m(m_)
|
|
{}
|
|
|
|
~SharedLockGuard()
|
|
{
|
|
unlock();
|
|
}
|
|
|
|
void unlock()
|
|
{
|
|
if (!locked)
|
|
return ;
|
|
|
|
locked = false;
|
|
m.unlock_shared();
|
|
}
|
|
};
|
|
|
|
} // namespace
|