| | #pragma once |
| |
|
| | #ifndef PTHREADPOOL_USE_CPUINFO |
| | #define PTHREADPOOL_USE_CPUINFO 0 |
| | #endif |
| |
|
| | #ifndef PTHREADPOOL_USE_FUTEX |
| | #if defined(__linux__) |
| | #define PTHREADPOOL_USE_FUTEX 1 |
| | #elif defined(__EMSCRIPTEN__) |
| | #define PTHREADPOOL_USE_FUTEX 1 |
| | #else |
| | #define PTHREADPOOL_USE_FUTEX 0 |
| | #endif |
| | #endif |
| |
|
| | #ifndef PTHREADPOOL_USE_GCD |
| | #if defined(__APPLE__) |
| | #define PTHREADPOOL_USE_GCD 1 |
| | #else |
| | #define PTHREADPOOL_USE_GCD 0 |
| | #endif |
| | #endif |
| |
|
| | #ifndef PTHREADPOOL_USE_EVENT |
| | #if defined(_WIN32) || defined(__CYGWIN__) |
| | #define PTHREADPOOL_USE_EVENT 1 |
| | #else |
| | #define PTHREADPOOL_USE_EVENT 0 |
| | #endif |
| | #endif |
| |
|
| | #ifndef PTHREADPOOL_USE_CONDVAR |
| | #if PTHREADPOOL_USE_GCD || PTHREADPOOL_USE_FUTEX || PTHREADPOOL_USE_EVENT |
| | #define PTHREADPOOL_USE_CONDVAR 0 |
| | #else |
| | #define PTHREADPOOL_USE_CONDVAR 1 |
| | #endif |
| | #endif |
| |
|
| |
|
| | |
| | #define PTHREADPOOL_SPIN_WAIT_ITERATIONS 1000000 |
| |
|
| | #define PTHREADPOOL_CACHELINE_SIZE 64 |
| | #if defined(__GNUC__) |
| | #define PTHREADPOOL_CACHELINE_ALIGNED __attribute__((__aligned__(PTHREADPOOL_CACHELINE_SIZE))) |
| | #elif defined(_MSC_VER) |
| | #define PTHREADPOOL_CACHELINE_ALIGNED __declspec(align(PTHREADPOOL_CACHELINE_SIZE)) |
| | #else |
| | #error "Platform-specific implementation of PTHREADPOOL_CACHELINE_ALIGNED required" |
| | #endif |
| |
|
| | #if defined(__clang__) |
| | #if __has_extension(c_static_assert) || __has_feature(c_static_assert) |
| | #define PTHREADPOOL_STATIC_ASSERT(predicate, message) _Static_assert((predicate), message) |
| | #else |
| | #define PTHREADPOOL_STATIC_ASSERT(predicate, message) |
| | #endif |
| | #elif defined(__GNUC__) && ((__GNUC__ > 4) || (__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) |
| | |
| | #define PTHREADPOOL_STATIC_ASSERT(predicate, message) _Static_assert((predicate), message) |
| | #else |
| | #define PTHREADPOOL_STATIC_ASSERT(predicate, message) |
| | #endif |
| |
|
| | #ifndef PTHREADPOOL_INTERNAL |
| | #if defined(__ELF__) |
| | #define PTHREADPOOL_INTERNAL __attribute__((__visibility__("internal"))) |
| | #elif defined(__MACH__) |
| | #define PTHREADPOOL_INTERNAL __attribute__((__visibility__("hidden"))) |
| | #else |
| | #define PTHREADPOOL_INTERNAL |
| | #endif |
| | #endif |
| |
|