Files
QTradeProgram/FTAPI/Lock.cpp
2025-08-15 15:57:31 +08:00

64 lines
1.0 KiB
C++

#include "Lock.h"
#ifdef OM_Win32
CLock::CLock(void)
{
If_OMWarn(!::InitializeCriticalSectionAndSpinCount(&m_criticalSection, 0x00000400));
}
CLock::~CLock(void)
{
DeleteCriticalSection(&m_criticalSection);
}
void CLock::Lock()
{
EnterCriticalSection(&m_criticalSection);
}
void CLock::UnLock()
{
LeaveCriticalSection(&m_criticalSection);
}
#else
CLock::CLock(void)
{
If_OMWarn(pthread_mutexattr_init(&m_mutexAttr) != 0);
If_OMWarn(pthread_mutexattr_settype(&m_mutexAttr, PTHREAD_MUTEX_RECURSIVE) != 0);
If_OMWarn(pthread_mutex_init(&m_mutex, &m_mutexAttr) != 0);
}
CLock::~CLock(void)
{
pthread_mutex_destroy(&m_mutex);
pthread_mutexattr_destroy(&m_mutexAttr);
}
void CLock::Lock()
{
pthread_mutex_lock(&m_mutex);
}
void CLock::UnLock()
{
pthread_mutex_unlock(&m_mutex);
}
#endif
CLock_Auto::CLock_Auto(CLock* pLock)
{
If_OMWarn(IsNullPtr(pLock));
m_pLock = pLock;
If_Do(IsNotNullPtr(m_pLock), m_pLock->Lock());
}
CLock_Auto::~CLock_Auto(void)
{
If_Do(IsNotNullPtr(m_pLock), m_pLock->UnLock());
}