79 lines
1.5 KiB
C++
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;
|
|||
|
}
|