xref: /aosp_15_r20/external/pthreadpool/src/threadpool-common.h (revision b095b0533730c2930f947df924a4486d266faa1a)
1*b095b053SXin Li #pragma once
2*b095b053SXin Li 
3*b095b053SXin Li #ifndef PTHREADPOOL_USE_CPUINFO
4*b095b053SXin Li 	#define PTHREADPOOL_USE_CPUINFO 0
5*b095b053SXin Li #endif
6*b095b053SXin Li 
7*b095b053SXin Li #ifndef PTHREADPOOL_USE_FUTEX
8*b095b053SXin Li 	#if defined(__linux__)
9*b095b053SXin Li 		#define PTHREADPOOL_USE_FUTEX 1
10*b095b053SXin Li 	#elif defined(__EMSCRIPTEN__)
11*b095b053SXin Li 		#define PTHREADPOOL_USE_FUTEX 1
12*b095b053SXin Li 	#else
13*b095b053SXin Li 		#define PTHREADPOOL_USE_FUTEX 0
14*b095b053SXin Li 	#endif
15*b095b053SXin Li #endif
16*b095b053SXin Li 
17*b095b053SXin Li #ifndef PTHREADPOOL_USE_GCD
18*b095b053SXin Li 	#if defined(__APPLE__)
19*b095b053SXin Li 		#define PTHREADPOOL_USE_GCD 1
20*b095b053SXin Li 	#else
21*b095b053SXin Li 		#define PTHREADPOOL_USE_GCD 0
22*b095b053SXin Li 	#endif
23*b095b053SXin Li #endif
24*b095b053SXin Li 
25*b095b053SXin Li #ifndef PTHREADPOOL_USE_EVENT
26*b095b053SXin Li 	#if defined(_WIN32) || defined(__CYGWIN__)
27*b095b053SXin Li 		#define PTHREADPOOL_USE_EVENT 1
28*b095b053SXin Li 	#else
29*b095b053SXin Li 		#define PTHREADPOOL_USE_EVENT 0
30*b095b053SXin Li 	#endif
31*b095b053SXin Li #endif
32*b095b053SXin Li 
33*b095b053SXin Li #ifndef PTHREADPOOL_USE_CONDVAR
34*b095b053SXin Li 	#if PTHREADPOOL_USE_GCD || PTHREADPOOL_USE_FUTEX || PTHREADPOOL_USE_EVENT
35*b095b053SXin Li 		#define PTHREADPOOL_USE_CONDVAR 0
36*b095b053SXin Li 	#else
37*b095b053SXin Li 		#define PTHREADPOOL_USE_CONDVAR 1
38*b095b053SXin Li 	#endif
39*b095b053SXin Li #endif
40*b095b053SXin Li 
41*b095b053SXin Li 
42*b095b053SXin Li /* Number of iterations in spin-wait loop before going into futex/condvar wait */
43*b095b053SXin Li #define PTHREADPOOL_SPIN_WAIT_ITERATIONS 1000000
44*b095b053SXin Li 
45*b095b053SXin Li #define PTHREADPOOL_CACHELINE_SIZE 64
46*b095b053SXin Li #if defined(__GNUC__)
47*b095b053SXin Li 	#define PTHREADPOOL_CACHELINE_ALIGNED __attribute__((__aligned__(PTHREADPOOL_CACHELINE_SIZE)))
48*b095b053SXin Li #elif defined(_MSC_VER)
49*b095b053SXin Li 	#define PTHREADPOOL_CACHELINE_ALIGNED __declspec(align(PTHREADPOOL_CACHELINE_SIZE))
50*b095b053SXin Li #else
51*b095b053SXin Li 	#error "Platform-specific implementation of PTHREADPOOL_CACHELINE_ALIGNED required"
52*b095b053SXin Li #endif
53*b095b053SXin Li 
54*b095b053SXin Li #if defined(__clang__)
55*b095b053SXin Li 	#if __has_extension(c_static_assert) || __has_feature(c_static_assert)
56*b095b053SXin Li 		#define PTHREADPOOL_STATIC_ASSERT(predicate, message) _Static_assert((predicate), message)
57*b095b053SXin Li 	#else
58*b095b053SXin Li 		#define PTHREADPOOL_STATIC_ASSERT(predicate, message)
59*b095b053SXin Li 	#endif
60*b095b053SXin Li #elif defined(__GNUC__) && ((__GNUC__ > 4) || (__GNUC__ == 4) && (__GNUC_MINOR__ >= 6))
61*b095b053SXin Li 	/* Static assert is supported by gcc >= 4.6 */
62*b095b053SXin Li 	#define PTHREADPOOL_STATIC_ASSERT(predicate, message) _Static_assert((predicate), message)
63*b095b053SXin Li #else
64*b095b053SXin Li 	#define PTHREADPOOL_STATIC_ASSERT(predicate, message)
65*b095b053SXin Li #endif
66*b095b053SXin Li 
67*b095b053SXin Li #ifndef PTHREADPOOL_INTERNAL
68*b095b053SXin Li 	#if defined(__ELF__)
69*b095b053SXin Li 		#define PTHREADPOOL_INTERNAL __attribute__((__visibility__("internal")))
70*b095b053SXin Li 	#elif defined(__MACH__)
71*b095b053SXin Li 		#define PTHREADPOOL_INTERNAL __attribute__((__visibility__("hidden")))
72*b095b053SXin Li 	#else
73*b095b053SXin Li 		#define PTHREADPOOL_INTERNAL
74*b095b053SXin Li 	#endif
75*b095b053SXin Li #endif
76