21#include "xtc_export.h"
39typedef struct xtc_notify xtc_notify_t;
47XTC_API
int xtc_notify_create(xtc_notify_t **out);
48XTC_API
void xtc_notify_destroy(xtc_notify_t *n);
53XTC_API
int xtc_notify_signal(xtc_notify_t *n);
58XTC_API
int xtc_notify_wait(xtc_notify_t *n, int64_t timeout_ns);
62typedef struct xtc_sem xtc_sem_t;
72XTC_API
int xtc_sem_create(
unsigned initial, xtc_sem_t **out);
73XTC_API
void xtc_sem_destroy(xtc_sem_t *s);
77XTC_API
int xtc_sem_post(xtc_sem_t *s,
unsigned n);
81XTC_API
int xtc_sem_acquire(xtc_sem_t *s,
unsigned n, int64_t timeout_ns);
84XTC_API
int xtc_sem_try_acquire(xtc_sem_t *s,
unsigned n);
86XTC_API
int xtc_sem_count(
const xtc_sem_t *s);
90typedef struct xtc_abort_source xtc_abort_source_t;
105XTC_API
int xtc_abort_source_create(xtc_abort_source_t **out);
106XTC_API
void xtc_abort_source_destroy(xtc_abort_source_t *s);
110XTC_API
int xtc_abort_source_fire(xtc_abort_source_t *s,
int reason);
113XTC_API
int xtc_abort_source_token(xtc_abort_source_t *s, xtc_abort_token_t *out);
120 xtc_abort_source_t *src;
123XTC_API
int xtc_abort_token_is_aborted(
const xtc_abort_token_t *t);
124XTC_API
int xtc_abort_token_reason(
const xtc_abort_token_t *t);
128typedef struct xtc_amutex xtc_amutex_t;
148XTC_API
int xtc_amutex_create(xtc_amutex_t **out);
159#define XTC_AMUTEX_RECURSIVE 0x1u
160XTC_API
int xtc_amutex_create_ex(xtc_amutex_t **out,
unsigned flags);
169#define XTC_AMUTEX_STATIC_MAX 32u
170XTC_API xtc_amutex_t *xtc_amutex_static(
unsigned slot);
172XTC_API
void xtc_amutex_destroy(xtc_amutex_t *m);
173XTC_API
int xtc_amutex_lock(xtc_amutex_t *m, int64_t timeout_ns);
174XTC_API
int xtc_amutex_try_lock(xtc_amutex_t *m);
175XTC_API
int xtc_amutex_unlock(xtc_amutex_t *m);
179typedef struct xtc_arwlock xtc_arwlock_t;
198XTC_API
int xtc_arwlock_create(xtc_arwlock_t **out);
199XTC_API
void xtc_arwlock_destroy(xtc_arwlock_t *r);
200XTC_API
int xtc_arwlock_rdlock(xtc_arwlock_t *r, int64_t timeout_ns);
201XTC_API
int xtc_arwlock_wrlock(xtc_arwlock_t *r, int64_t timeout_ns);
202XTC_API
int xtc_arwlock_unlock(xtc_arwlock_t *r);
206typedef struct xtc_rwlock xtc_rwlock_t;
217XTC_API
int xtc_rwlock_create(xtc_rwlock_t **out);
218XTC_API
void xtc_rwlock_destroy(xtc_rwlock_t *r);
219XTC_API
int xtc_rwlock_rdlock(xtc_rwlock_t *r, int64_t timeout_ns);
220XTC_API
int xtc_rwlock_wrlock(xtc_rwlock_t *r, int64_t timeout_ns);
221XTC_API
int xtc_rwlock_unlock(xtc_rwlock_t *r);
225typedef struct xtc_barrier xtc_barrier_t;
235XTC_API
int xtc_barrier_create(
unsigned n, xtc_barrier_t **out);
236XTC_API
void xtc_barrier_destroy(xtc_barrier_t *b);
237XTC_API
int xtc_barrier_wait(xtc_barrier_t *b);
241typedef struct xtc_gate xtc_gate_t;
264XTC_API
int xtc_gate_create(xtc_gate_t **out);
265XTC_API
void xtc_gate_destroy(xtc_gate_t *g);
266XTC_API
int xtc_gate_enter(xtc_gate_t *g);
267XTC_API
int xtc_gate_leave(xtc_gate_t *g);
268XTC_API
int xtc_gate_close(xtc_gate_t *g);
269XTC_API
int xtc_gate_drain(xtc_gate_t *g, int64_t timeout_ns);
270XTC_API
int xtc_gate_count(
const xtc_gate_t *g);