#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; }