20#include "xtc_export.h"
29typedef struct xtc_notify xtc_notify_t;
37XTC_API
int xtc_notify_create(xtc_notify_t **out);
38XTC_API
void xtc_notify_destroy(xtc_notify_t *n);
43XTC_API
int xtc_notify_signal(xtc_notify_t *n);
48XTC_API
int xtc_notify_wait(xtc_notify_t *n, int64_t timeout_ns);
52typedef struct xtc_sem xtc_sem_t;
62XTC_API
int xtc_sem_create(
unsigned initial, xtc_sem_t **out);
63XTC_API
void xtc_sem_destroy(xtc_sem_t *s);
66XTC_API
int xtc_sem_post(xtc_sem_t *s,
unsigned n);
69XTC_API
int xtc_sem_acquire(xtc_sem_t *s,
unsigned n, int64_t timeout_ns);
72XTC_API
int xtc_sem_try_acquire(xtc_sem_t *s,
unsigned n);
74XTC_API
int xtc_sem_count(
const xtc_sem_t *s);
78typedef struct xtc_abort_source xtc_abort_source_t;
93XTC_API
int xtc_abort_source_create(xtc_abort_source_t **out);
94XTC_API
void xtc_abort_source_destroy(xtc_abort_source_t *s);
98XTC_API
int xtc_abort_source_fire(xtc_abort_source_t *s,
int reason);
101XTC_API
int xtc_abort_source_token(xtc_abort_source_t *s, xtc_abort_token_t *out);
108 xtc_abort_source_t *src;
111XTC_API
int xtc_abort_token_is_aborted(
const xtc_abort_token_t *t);
112XTC_API
int xtc_abort_token_reason(
const xtc_abort_token_t *t);
116typedef struct xtc_amutex xtc_amutex_t;
136XTC_API
int xtc_amutex_create(xtc_amutex_t **out);
147#define XTC_AMUTEX_RECURSIVE 0x1u
148XTC_API
int xtc_amutex_create_ex(xtc_amutex_t **out,
unsigned flags);
157#define XTC_AMUTEX_STATIC_MAX 32u
158XTC_API xtc_amutex_t *xtc_amutex_static(
unsigned slot);
160XTC_API
void xtc_amutex_destroy(xtc_amutex_t *m);
161XTC_API
int xtc_amutex_lock(xtc_amutex_t *m, int64_t timeout_ns);
162XTC_API
int xtc_amutex_try_lock(xtc_amutex_t *m);
163XTC_API
int xtc_amutex_unlock(xtc_amutex_t *m);
167typedef struct xtc_arwlock xtc_arwlock_t;
186XTC_API
int xtc_arwlock_create(xtc_arwlock_t **out);
187XTC_API
void xtc_arwlock_destroy(xtc_arwlock_t *r);
188XTC_API
int xtc_arwlock_rdlock(xtc_arwlock_t *r, int64_t timeout_ns);
189XTC_API
int xtc_arwlock_wrlock(xtc_arwlock_t *r, int64_t timeout_ns);
190XTC_API
int xtc_arwlock_unlock(xtc_arwlock_t *r);
194typedef struct xtc_rwlock xtc_rwlock_t;
205XTC_API
int xtc_rwlock_create(xtc_rwlock_t **out);
206XTC_API
void xtc_rwlock_destroy(xtc_rwlock_t *r);
207XTC_API
int xtc_rwlock_rdlock(xtc_rwlock_t *r, int64_t timeout_ns);
208XTC_API
int xtc_rwlock_wrlock(xtc_rwlock_t *r, int64_t timeout_ns);
209XTC_API
int xtc_rwlock_unlock(xtc_rwlock_t *r);
213typedef struct xtc_barrier xtc_barrier_t;
223XTC_API
int xtc_barrier_create(
unsigned n, xtc_barrier_t **out);
224XTC_API
void xtc_barrier_destroy(xtc_barrier_t *b);
225XTC_API
int xtc_barrier_wait(xtc_barrier_t *b);
229typedef struct xtc_gate xtc_gate_t;
252XTC_API
int xtc_gate_create(xtc_gate_t **out);
253XTC_API
void xtc_gate_destroy(xtc_gate_t *g);
254XTC_API
int xtc_gate_enter(xtc_gate_t *g);
255XTC_API
int xtc_gate_leave(xtc_gate_t *g);
256XTC_API
int xtc_gate_close(xtc_gate_t *g);
257XTC_API
int xtc_gate_drain(xtc_gate_t *g, int64_t timeout_ns);
258XTC_API
int xtc_gate_count(
const xtc_gate_t *g);