1 #include "test/jemalloc_test.h" 2 3 #ifndef _CRT_SPINCOUNT 4 #define _CRT_SPINCOUNT 4000 5 #endif 6 7 bool 8 mtx_init(mtx_t *mtx) 9 { 10 11 #ifdef _WIN32 12 if (!InitializeCriticalSectionAndSpinCount(&mtx->lock, _CRT_SPINCOUNT)) 13 return (true); 14 #elif (defined(JEMALLOC_OSSPIN)) 15 mtx->lock = 0; 16 #else 17 pthread_mutexattr_t attr; 18 19 if (pthread_mutexattr_init(&attr) != 0) 20 return (true); 21 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_DEFAULT); 22 if (pthread_mutex_init(&mtx->lock, &attr) != 0) { 23 pthread_mutexattr_destroy(&attr); 24 return (true); 25 } 26 pthread_mutexattr_destroy(&attr); 27 #endif 28 return (false); 29 } 30 31 void 32 mtx_fini(mtx_t *mtx) 33 { 34 35 #ifdef _WIN32 36 #elif (defined(JEMALLOC_OSSPIN)) 37 #else 38 pthread_mutex_destroy(&mtx->lock); 39 #endif 40 } 41 42 void 43 mtx_lock(mtx_t *mtx) 44 { 45 46 #ifdef _WIN32 47 EnterCriticalSection(&mtx->lock); 48 #elif (defined(JEMALLOC_OSSPIN)) 49 OSSpinLockLock(&mtx->lock); 50 #else 51 pthread_mutex_lock(&mtx->lock); 52 #endif 53 } 54 55 void 56 mtx_unlock(mtx_t *mtx) 57 { 58 59 #ifdef _WIN32 60 LeaveCriticalSection(&mtx->lock); 61 #elif (defined(JEMALLOC_OSSPIN)) 62 OSSpinLockUnlock(&mtx->lock); 63 #else 64 pthread_mutex_unlock(&mtx->lock); 65 #endif 66 } 67