1
0
cuberite-2a/source/cCriticalSection.h
2012-01-29 14:29:26 +00:00

56 lines
930 B
C++

#pragma once
class cCriticalSection
{
public:
cCriticalSection();
~cCriticalSection();
void Lock();
void Unlock();
private:
void* m_CriticalSectionPtr; // Pointer to a CRITICAL_SECTION object
#ifndef _WIN32
void* m_Attributes;
#endif
};
/// RAII for cCriticalSection - locks the CS on creation, unlocks on destruction
class cCSLock
{
cCriticalSection * m_CS;
#ifdef _DEBUG
// Unlike a cCriticalSection, this object should be used from a single thread, therefore access to m_IsLocked is not threadsafe
bool m_IsLocked;
#endif // _DEBUG
public:
cCSLock(cCriticalSection * a_CS);
~cCSLock();
// Temporarily unlock or re-lock:
void Lock(void);
void Unlock(void);
} ;
/// Temporary RAII unlock for a cCSLock. Useful for unlock-wait-relock scenarios
class cCSUnlock
{
cCSLock & m_Lock;
public:
cCSUnlock(cCSLock & a_Lock);
~cCSUnlock();
} ;