12#ifndef XTC_OS_THREAD_H
13#define XTC_OS_THREAD_H
26# define XTC_THREAD_LOCAL __declspec(thread)
27#elif defined(__GNUC__) || defined(__clang__)
28# define XTC_THREAD_LOCAL __thread
30# define XTC_THREAD_LOCAL _Thread_local
52struct __os_mutex { _Alignas(
long long)
unsigned char storage[64]; };
53struct __os_rwlock { _Alignas(
long long)
unsigned char storage[256]; };
54struct __os_cond { _Alignas(
long long)
unsigned char storage[64]; };
55struct __os_sem { _Alignas(
long long)
unsigned char storage[64]; };
62typedef unsigned long __os_tls_key_t;
64typedef void *(*__os_thread_fn)(
void *);
65typedef void (*__os_tls_dtor)(
void *);
79int __os_thread_create(__os_thread_t *thr, __os_thread_fn fn,
void *arg);
87int __os_pthread_create_masked(pthread_t *out,
void *(*fn)(
void *),
89int __os_thread_join(__os_thread_t *thr,
void **retval);
90int __os_thread_detach(__os_thread_t *thr);
91int __os_thread_self(__os_thread_t *out);
92void __os_thread_yield(
void);
93int __os_thread_setname(
const char *name);
94void __os_thread_apply_default_qos(
void);
95int __os_thread_set_affinity(
int cpu);
105int __os_tls_create(__os_tls_key_t *key, __os_tls_dtor dtor);
106int __os_tls_destroy(__os_tls_key_t key);
107int __os_tls_set(__os_tls_key_t key,
void *value);
108void *__os_tls_get(__os_tls_key_t key);
119int __os_mutex_init(__os_mutex_t *m);
120int __os_mutex_destroy(__os_mutex_t *m);
121int __os_mutex_lock(__os_mutex_t *m);
122int __os_mutex_trylock(__os_mutex_t *m);
123int __os_mutex_unlock(__os_mutex_t *m);
134int __os_rwlock_init(__os_rwlock_t *r);
135int __os_rwlock_destroy(__os_rwlock_t *r);
136int __os_rwlock_rdlock(__os_rwlock_t *r);
137int __os_rwlock_wrlock(__os_rwlock_t *r);
138int __os_rwlock_unlock(__os_rwlock_t *r);
149int __os_cond_init(__os_cond_t *c);
150int __os_cond_destroy(__os_cond_t *c);
151int __os_cond_wait(__os_cond_t *c, __os_mutex_t *m);
152int __os_cond_signal(__os_cond_t *c);
153int __os_cond_broadcast(__os_cond_t *c);
164int __os_sem_init(__os_sem_t *s,
unsigned initial);
165int __os_sem_destroy(__os_sem_t *s);
166int __os_sem_post(__os_sem_t *s);
167int __os_sem_wait(__os_sem_t *s);
168int __os_sem_trywait(__os_sem_t *s);