l2-unlegits/libl2c_utils/l2c_lock.cpp
2012-02-01 05:25:08 +00:00

47 lines
925 B
C++

#include "pch.h"
#include "l2c_lock.h"
CriticalSection::CriticalSection()
{
m_locked = false;
InitializeCriticalSectionAndSpinCount( &m_lock, 10 );
}
CriticalSection::~CriticalSection()
{
if( m_locked ) LeaveCriticalSection( &m_lock );
m_locked = false;
DeleteCriticalSection( &m_lock );
}
void CriticalSection::Lock()
{
if( m_locked ) return;
EnterCriticalSection( &m_lock );
m_locked = true;
}
void CriticalSection::Unlock()
{
if( !m_locked ) return;
LeaveCriticalSection( &m_lock );
m_locked = false;
}
bool CriticalSection::TryLock( unsigned int wait_milliseconds )
{
if( m_locked ) return true;
if( TryEnterCriticalSection( &m_lock ) ) return true;
if( wait_milliseconds > 0 )
{
Sleep( (DWORD)wait_milliseconds );
if( TryEnterCriticalSection( &m_lock ) ) return true;
}
return false;
}
bool CriticalSection::isLocked() const
{
return m_locked;
}