47 lines
925 B
C++
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;
|
|
}
|