39#include "xtc_export.h"
47#ifndef XTC_LWLOCK_MAX_BACKENDS
48#define XTC_LWLOCK_MAX_BACKENDS 4096
51typedef enum xtc_lwlock_mode {
57typedef struct xtc_lwlock {
58 _Atomic uint32_t state;
59 pthread_mutex_t wait_mu;
60 pthread_cond_t wait_cv;
92XTC_API
int xtc_lwlock_init(
xtc_lwlock_t *lock, uint16_t tranche);
96XTC_API
int xtc_lwlock_acquire(
xtc_lwlock_t *lock, xtc_lwlock_mode_t mode);
100XTC_API
int xtc_lwlock_acquire_cond(
xtc_lwlock_t *lock, xtc_lwlock_mode_t mode);
107XTC_API
int xtc_lwlock_held_by_me(
const xtc_lwlock_t *lock);
108XTC_API
int xtc_lwlock_held_by_me_in_mode(
const xtc_lwlock_t *lock,
109 xtc_lwlock_mode_t mode);
121typedef void (*xtc_lwlock_track_fn)(uint16_t held_tranche,
122 uint16_t acquired_tranche,
void *user);
123XTC_API
void xtc_lwlock_track_enable(
int on);
124XTC_API
long xtc_lwlock_track_violations(
void);
125XTC_API
void xtc_lwlock_track_reset(
void);
126XTC_API
void xtc_lwlock_track_set_handler(xtc_lwlock_track_fn fn,
void *user);