wrapthread.h (2303B)
1 #if THREADS == 1 2 #define WRAPTHREAD_NOTHREADS 1 3 #elif defined(__unix__) 4 #define WRAPTHREAD_PTHREADS 1 5 #elif defined(__has_include) 6 #if __has_include(<pthreads.h>) 7 #define WRAPTHREAD_PTHREADS 1 8 #elif __has_include(<threads.h>) 9 #define WRAPTHREAD_C11THREADS 1 10 #endif 11 #else 12 #define WRAPTHREAD_NOTHREADS 1 13 #endif 14 15 #if WRAPTHREAD_PTHREADS 16 #include <pthread.h> 17 18 #define wrapthread_atomic _Atomic 19 20 #define wrapthread_return_t void * 21 #define wrapthread_return_val NULL 22 23 #define wrapthread_define_var_thread_t(x) pthread_t x 24 #define wrapthread_define_var_mutex_t(x) pthread_mutex_t x 25 #define wrapthread_define_struct_thread_t(x) pthread_t x 26 #define wrapthread_define_struct_mutex_t(x) pthread_mutex_t x 27 28 #define wrapthread_define_if_threads(T, x) T x 29 30 #define wrapthread_create(a, f, arg) pthread_create(a, NULL, f, arg) 31 #define wrapthread_join(a) pthread_join(a, NULL) 32 #define wrapthread_mutex_init(a) pthread_mutex_init(a, NULL) 33 #define wrapthread_mutex_lock(a) pthread_mutex_lock(a) 34 #define wrapthread_mutex_unlock(a) pthread_mutex_unlock(a) 35 36 #elif WRAPTHREAD_C11THREADS 37 #include <threads.h> 38 39 #define wrapthread_atomic _Atomic 40 41 #define wrapthread_return_t int 42 #define wrapthread_return_val 0 43 44 #define wrapthread_define_var_thread_t(x) thrd_t x 45 #define wrapthread_define_var_mutex_t(x) mtx_t x 46 #define wrapthread_define_struct_thread_t(x) thrd_t x 47 #define wrapthread_define_struct_mutex_t(x) mtx_t x 48 49 #define wrapthread_define_if_threads(T, x) T x 50 51 #define wrapthread_create(a, f, arg) thrd_create(a, f, arg) 52 #define wrapthread_join(a) thrd_join(a, NULL) 53 #define wrapthread_mutex_init(a) mtx_init(a, mtx_plain) 54 #define wrapthread_mutex_lock(a) mtx_lock(a) 55 #define wrapthread_mutex_unlock(a) mtx_unlock(a) 56 57 #else 58 59 #define wrapthread_atomic 60 61 #define wrapthread_return_t int 62 #define wrapthread_return_val 0 63 64 #define wrapthread_define_var_thread_t(x) unused char x 65 #define wrapthread_define_var_mutex_t(x) unused char x 66 #define wrapthread_define_struct_thread_t(x) char x 67 #define wrapthread_define_struct_mutex_t(x) char x 68 69 #define wrapthread_define_if_threads(T, x) T x; (void)(x) 70 71 #define wrapthread_create(t, f, arg) f(arg) 72 #define wrapthread_join(a) 73 #define wrapthread_mutex_init(a) 74 #define wrapthread_mutex_lock(a) 75 #define wrapthread_mutex_unlock(a) 76 77 #endif