code_app/modules/base/HGLock.cpp

79 lines
1.5 KiB
C++

#include "HGLock.h"
#include "HGInc.h"
HGResult HGAPI HGBase_CreateLock(HGLock* lock)
{
if (NULL == lock)
{
return HGBASE_ERR_INVALIDARG;
}
#if !defined(HG_CMP_MSC)
pthread_mutex_t* hLock = new pthread_mutex_t;
if (0 != pthread_mutex_init(hLock, NULL))
{
delete hLock;
return HGBASE_ERR_FAIL;
}
*lock = (HGLock)hLock;
#else
CRITICAL_SECTION* hLock = new CRITICAL_SECTION;
InitializeCriticalSection(hLock);
*lock = (HGLock)hLock;
#endif
return HGBASE_ERR_OK;
}
HGResult HGAPI HGBase_DestroyLock(HGLock lock)
{
if (NULL == lock)
{
return HGBASE_ERR_INVALIDARG;
}
#if !defined(HG_CMP_MSC)
pthread_mutex_t* hLock = (pthread_mutex_t*)lock;
pthread_mutex_destroy(hLock);
delete hLock;
#else
CRITICAL_SECTION* hLock = (CRITICAL_SECTION*)lock;
DeleteCriticalSection(hLock);
delete hLock;
#endif
return HGBASE_ERR_OK;
}
HGResult HGAPI HGBase_EnterLock(HGLock lock)
{
if (NULL == lock)
{
return HGBASE_ERR_INVALIDARG;
}
#if !defined(HG_CMP_MSC)
pthread_mutex_t* hLock = (pthread_mutex_t*)lock;
pthread_mutex_lock(hLock);
#else
CRITICAL_SECTION* hLock = (CRITICAL_SECTION*)lock;
EnterCriticalSection(hLock);
#endif
return HGBASE_ERR_OK;
}
HGResult HGAPI HGBase_LeaveLock(HGLock lock)
{
if (NULL == lock)
{
return HGBASE_ERR_INVALIDARG;
}
#if !defined(HG_CMP_MSC)
pthread_mutex_t* hLock = (pthread_mutex_t*)lock;
pthread_mutex_unlock(hLock);
#else
CRITICAL_SECTION* hLock = (CRITICAL_SECTION*)lock;
LeaveCriticalSection(hLock);
#endif
return HGBASE_ERR_OK;
}