1*c9945492SAndroid Build Coastguard Worker #ifndef _THREADS_H 2*c9945492SAndroid Build Coastguard Worker #define _THREADS_H 3*c9945492SAndroid Build Coastguard Worker 4*c9945492SAndroid Build Coastguard Worker #include <features.h> 5*c9945492SAndroid Build Coastguard Worker #include <time.h> 6*c9945492SAndroid Build Coastguard Worker 7*c9945492SAndroid Build Coastguard Worker #ifdef __cplusplus 8*c9945492SAndroid Build Coastguard Worker extern "C" { 9*c9945492SAndroid Build Coastguard Worker typedef unsigned long thrd_t; 10*c9945492SAndroid Build Coastguard Worker #else 11*c9945492SAndroid Build Coastguard Worker typedef struct __pthread *thrd_t; 12*c9945492SAndroid Build Coastguard Worker #define thread_local _Thread_local 13*c9945492SAndroid Build Coastguard Worker #endif 14*c9945492SAndroid Build Coastguard Worker 15*c9945492SAndroid Build Coastguard Worker typedef int once_flag; 16*c9945492SAndroid Build Coastguard Worker typedef unsigned tss_t; 17*c9945492SAndroid Build Coastguard Worker typedef int (*thrd_start_t)(void *); 18*c9945492SAndroid Build Coastguard Worker typedef void (*tss_dtor_t)(void *); 19*c9945492SAndroid Build Coastguard Worker 20*c9945492SAndroid Build Coastguard Worker #define __NEED_cnd_t 21*c9945492SAndroid Build Coastguard Worker #define __NEED_mtx_t 22*c9945492SAndroid Build Coastguard Worker 23*c9945492SAndroid Build Coastguard Worker #include <bits/alltypes.h> 24*c9945492SAndroid Build Coastguard Worker 25*c9945492SAndroid Build Coastguard Worker #define TSS_DTOR_ITERATIONS 4 26*c9945492SAndroid Build Coastguard Worker 27*c9945492SAndroid Build Coastguard Worker enum { 28*c9945492SAndroid Build Coastguard Worker thrd_success = 0, 29*c9945492SAndroid Build Coastguard Worker thrd_busy = 1, 30*c9945492SAndroid Build Coastguard Worker thrd_error = 2, 31*c9945492SAndroid Build Coastguard Worker thrd_nomem = 3, 32*c9945492SAndroid Build Coastguard Worker thrd_timedout = 4, 33*c9945492SAndroid Build Coastguard Worker }; 34*c9945492SAndroid Build Coastguard Worker 35*c9945492SAndroid Build Coastguard Worker enum { 36*c9945492SAndroid Build Coastguard Worker mtx_plain = 0, 37*c9945492SAndroid Build Coastguard Worker mtx_recursive = 1, 38*c9945492SAndroid Build Coastguard Worker mtx_timed = 2, 39*c9945492SAndroid Build Coastguard Worker }; 40*c9945492SAndroid Build Coastguard Worker 41*c9945492SAndroid Build Coastguard Worker #define ONCE_FLAG_INIT 0 42*c9945492SAndroid Build Coastguard Worker 43*c9945492SAndroid Build Coastguard Worker int thrd_create(thrd_t *, thrd_start_t, void *); 44*c9945492SAndroid Build Coastguard Worker _Noreturn void thrd_exit(int); 45*c9945492SAndroid Build Coastguard Worker 46*c9945492SAndroid Build Coastguard Worker int thrd_detach(thrd_t); 47*c9945492SAndroid Build Coastguard Worker int thrd_join(thrd_t, int *); 48*c9945492SAndroid Build Coastguard Worker 49*c9945492SAndroid Build Coastguard Worker int thrd_sleep(const struct timespec *, struct timespec *); 50*c9945492SAndroid Build Coastguard Worker void thrd_yield(void); 51*c9945492SAndroid Build Coastguard Worker 52*c9945492SAndroid Build Coastguard Worker thrd_t thrd_current(void); 53*c9945492SAndroid Build Coastguard Worker int thrd_equal(thrd_t, thrd_t); 54*c9945492SAndroid Build Coastguard Worker #ifndef __cplusplus 55*c9945492SAndroid Build Coastguard Worker #define thrd_equal(A, B) ((A) == (B)) 56*c9945492SAndroid Build Coastguard Worker #endif 57*c9945492SAndroid Build Coastguard Worker 58*c9945492SAndroid Build Coastguard Worker void call_once(once_flag *, void (*)(void)); 59*c9945492SAndroid Build Coastguard Worker 60*c9945492SAndroid Build Coastguard Worker int mtx_init(mtx_t *, int); 61*c9945492SAndroid Build Coastguard Worker void mtx_destroy(mtx_t *); 62*c9945492SAndroid Build Coastguard Worker 63*c9945492SAndroid Build Coastguard Worker int mtx_lock(mtx_t *); 64*c9945492SAndroid Build Coastguard Worker int mtx_timedlock(mtx_t *__restrict, const struct timespec *__restrict); 65*c9945492SAndroid Build Coastguard Worker int mtx_trylock(mtx_t *); 66*c9945492SAndroid Build Coastguard Worker int mtx_unlock(mtx_t *); 67*c9945492SAndroid Build Coastguard Worker 68*c9945492SAndroid Build Coastguard Worker int cnd_init(cnd_t *); 69*c9945492SAndroid Build Coastguard Worker void cnd_destroy(cnd_t *); 70*c9945492SAndroid Build Coastguard Worker 71*c9945492SAndroid Build Coastguard Worker int cnd_broadcast(cnd_t *); 72*c9945492SAndroid Build Coastguard Worker int cnd_signal(cnd_t *); 73*c9945492SAndroid Build Coastguard Worker 74*c9945492SAndroid Build Coastguard Worker int cnd_timedwait(cnd_t *__restrict, mtx_t *__restrict, const struct timespec *__restrict); 75*c9945492SAndroid Build Coastguard Worker int cnd_wait(cnd_t *, mtx_t *); 76*c9945492SAndroid Build Coastguard Worker 77*c9945492SAndroid Build Coastguard Worker int tss_create(tss_t *, tss_dtor_t); 78*c9945492SAndroid Build Coastguard Worker void tss_delete(tss_t); 79*c9945492SAndroid Build Coastguard Worker 80*c9945492SAndroid Build Coastguard Worker int tss_set(tss_t, void *); 81*c9945492SAndroid Build Coastguard Worker void *tss_get(tss_t); 82*c9945492SAndroid Build Coastguard Worker 83*c9945492SAndroid Build Coastguard Worker #if _REDIR_TIME64 84*c9945492SAndroid Build Coastguard Worker __REDIR(thrd_sleep, __thrd_sleep_time64); 85*c9945492SAndroid Build Coastguard Worker __REDIR(mtx_timedlock, __mtx_timedlock_time64); 86*c9945492SAndroid Build Coastguard Worker __REDIR(cnd_timedwait, __cnd_timedwait_time64); 87*c9945492SAndroid Build Coastguard Worker #endif 88*c9945492SAndroid Build Coastguard Worker 89*c9945492SAndroid Build Coastguard Worker #ifdef __cplusplus 90*c9945492SAndroid Build Coastguard Worker } 91*c9945492SAndroid Build Coastguard Worker #endif 92*c9945492SAndroid Build Coastguard Worker 93*c9945492SAndroid Build Coastguard Worker #endif 94