enh(ScopedLockWithUnlock): make it more alike std::unique_lock (#4652)

This commit is contained in:
siren186
2024-08-30 04:03:33 +08:00
committed by GitHub
parent 6d2b26645a
commit aa8084c6a0
3 changed files with 25 additions and 2 deletions

View File

@@ -77,12 +77,18 @@ class ScopedLockWithUnlock
public:
explicit ScopedLockWithUnlock(M& mutex): _pMutex(&mutex)
{
poco_assert(_pMutex != nullptr);
_pMutex->lock();
_locked = true;
}
ScopedLockWithUnlock(M& mutex, long milliseconds): _pMutex(&mutex)
{
poco_assert(_pMutex != nullptr);
_pMutex->lock(milliseconds);
_locked = true;
}
~ScopedLockWithUnlock()
@@ -97,17 +103,29 @@ public:
}
}
void lock()
{
poco_assert(_pMutex != nullptr);
poco_assert(_locked == false);
_pMutex->lock();
_locked = true;
}
void unlock()
{
if (_pMutex)
if (_locked)
{
poco_assert(_pMutex != nullptr);
_pMutex->unlock();
_pMutex = 0;
_locked = false;
}
}
private:
M* _pMutex;
bool _locked = false;
ScopedLockWithUnlock();
ScopedLockWithUnlock(const ScopedLockWithUnlock&);