mutex.h revision 6da5418ded9170b087c35960e0010006430117c1
1/******************************************************************************/ 2#ifdef JEMALLOC_H_TYPES 3 4#ifdef JEMALLOC_OSSPIN 5typedef OSSpinLock malloc_mutex_t; 6#define MALLOC_MUTEX_INITIALIZER 0 7#else 8typedef pthread_mutex_t malloc_mutex_t; 9# ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP 10# define MALLOC_MUTEX_INITIALIZER PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP 11# else 12# define MALLOC_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER 13# endif 14#endif 15 16#endif /* JEMALLOC_H_TYPES */ 17/******************************************************************************/ 18#ifdef JEMALLOC_H_STRUCTS 19 20#endif /* JEMALLOC_H_STRUCTS */ 21/******************************************************************************/ 22#ifdef JEMALLOC_H_EXTERNS 23 24#ifdef JEMALLOC_LAZY_LOCK 25extern bool isthreaded; 26#else 27# define isthreaded true 28#endif 29 30bool malloc_mutex_init(malloc_mutex_t *mutex); 31void malloc_mutex_prefork(malloc_mutex_t *mutex); 32void malloc_mutex_postfork_parent(malloc_mutex_t *mutex); 33void malloc_mutex_postfork_child(malloc_mutex_t *mutex); 34 35#endif /* JEMALLOC_H_EXTERNS */ 36/******************************************************************************/ 37#ifdef JEMALLOC_H_INLINES 38 39#ifndef JEMALLOC_ENABLE_INLINE 40void malloc_mutex_lock(malloc_mutex_t *mutex); 41bool malloc_mutex_trylock(malloc_mutex_t *mutex); 42void malloc_mutex_unlock(malloc_mutex_t *mutex); 43#endif 44 45#if (defined(JEMALLOC_ENABLE_INLINE) || defined(JEMALLOC_MUTEX_C_)) 46JEMALLOC_INLINE void 47malloc_mutex_lock(malloc_mutex_t *mutex) 48{ 49 50 if (isthreaded) { 51#ifdef JEMALLOC_OSSPIN 52 OSSpinLockLock(mutex); 53#else 54 pthread_mutex_lock(mutex); 55#endif 56 } 57} 58 59JEMALLOC_INLINE bool 60malloc_mutex_trylock(malloc_mutex_t *mutex) 61{ 62 63 if (isthreaded) { 64#ifdef JEMALLOC_OSSPIN 65 return (OSSpinLockTry(mutex) == false); 66#else 67 return (pthread_mutex_trylock(mutex) != 0); 68#endif 69 } else 70 return (false); 71} 72 73JEMALLOC_INLINE void 74malloc_mutex_unlock(malloc_mutex_t *mutex) 75{ 76 77 if (isthreaded) { 78#ifdef JEMALLOC_OSSPIN 79 OSSpinLockUnlock(mutex); 80#else 81 pthread_mutex_unlock(mutex); 82#endif 83 } 84} 85#endif 86 87#endif /* JEMALLOC_H_INLINES */ 88/******************************************************************************/ 89