nissy-core

The "engine" of nissy, including the H48 optimal solver.
git clone https://git.tronto.net/nissy-core
Download | Log | Files | Refs | README | LICENSE

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