#ifndef JEMALLOC_INTERNAL_SPIN_H #define JEMALLOC_INTERNAL_SPIN_H #define SPIN_INITIALIZER {0U} typedef struct { unsigned iteration; } spin_t; static inline void spin_cpu_spinwait() { # if HAVE_CPU_SPINWAIT CPU_SPINWAIT; # else volatile int x = 0; x = x; # endif } static inline void spin_adaptive(spin_t *spin) { volatile uint32_t i; if (spin->iteration < 5) { for (i = 0; i < (1U << spin->iteration); i++) { spin_cpu_spinwait(); } spin->iteration++; } else { #ifdef _WIN32 SwitchToThread(); #else sched_yield(); #endif } } #undef SPIN_INLINE #endif /* JEMALLOC_INTERNAL_SPIN_H */