admin
2023-03-07 8b06b1cbf112d55307ea8a6efe711db4e7506d89
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#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 */