struct BirnetThreadTable
{
void (*mutex_chain4init) (BirnetMutex*mutex);
void (*mutex_unchain) (BirnetMutex*mutex);
void (*rec_mutex_chain4init) (BirnetRecMutex*mutex);
void (*rec_mutex_unchain) (BirnetRecMutex*mutex);
void (*cond_chain4init) (BirnetCond*cond);
void (*cond_unchain) (BirnetCond*cond);
void (*atomic_pointer_set) (volatile void*atomic, volatile void*value);
void* (*atomic_pointer_get) (volatile void*atomic);
int (*atomic_pointer_cas) (volatile void*atomic, volatile void*oldval, volatile void*newval);
void (*atomic_int_set) (volatile int*atomic, int newval);
int (*atomic_int_get) (volatile int*atomic);
int (*atomic_int_cas) (volatile int*atomic, int oldval, int newval);
void (*atomic_int_add) (volatile int*atomic, int diff);
int (*atomic_int_swap_add) (volatile int*atomic, int diff);
void (*atomic_uint_set) (volatile uint*atomic, uint newval);
uint (*atomic_uint_get) (volatile uint*atomic);
int (*atomic_uint_cas) (volatile uint*atomic, uint oldval, uint newval);
void (*atomic_uint_add) (volatile uint*atomic, uint diff);
uint (*atomic_uint_swap_add) (volatile uint*atomic, uint diff);
BirnetThread* (*thread_new) (const char*name);
BirnetThread* (*thread_ref) (BirnetThread*thread);
BirnetThread* (*thread_ref_sink) (BirnetThread*thread);
void (*thread_unref) (BirnetThread*thread);
bool (*thread_start) (BirnetThread*thread, BirnetThreadFunc func, void*user_data);
BirnetThread* (*thread_self) (void);
void* (*thread_selfxx) (void);
void* (*thread_getxx) (BirnetThread*thread);
bool (*thread_setxx) (BirnetThread*thread, void*xxdata);
int (*thread_pid) (BirnetThread*thread);
const char* (*thread_name) (BirnetThread*thread);
void (*thread_set_name) (const char*newname);
bool (*thread_sleep) (BirnetInt64 max_useconds);
void (*thread_wakeup) (BirnetThread*thread);
void (*thread_awake_after) (BirnetUInt64 stamp);
void (*thread_emit_wakeups) (BirnetUInt64 wakeup_stamp);
void (*thread_set_wakeup) (BirnetThreadWakeup wakeup_func, void*wakeup_data, void(*destroy_data)(void*));
void (*thread_abort) (BirnetThread*thread);
void (*thread_queue_abort) (BirnetThread*thread);
bool (*thread_aborted) (void);
bool (*thread_get_aborted) (BirnetThread*thread);
bool (*thread_get_running) (BirnetThread*thread);
void (*thread_wait_for_exit) (BirnetThread*thread);
void (*thread_yield) (void);
void (*thread_exit) (void*retval) BIRNET_NORETURN;
void (*thread_set_handle) (BirnetThread*handle);
BirnetThread* (*thread_get_handle) (void);
BirnetThreadInfo* (*info_collect) (BirnetThread*thread);
void (*info_free) (BirnetThreadInfo*info);
void* (*qdata_get) (uint glib_quark);
void (*qdata_set) (uint glib_quark, void*data, void(*destroy_data)(void*));
void* (*qdata_steal) (uint glib_quark);
void (*mutex_init) (BirnetMutex*mutex);
void (*mutex_lock) (BirnetMutex*mutex);
int (*mutex_trylock) (BirnetMutex*mutex);
void (*mutex_unlock) (BirnetMutex*mutex);
void (*mutex_destroy) (BirnetMutex*mutex);
void (*rec_mutex_init) (BirnetRecMutex*mutex);
void (*rec_mutex_lock) (BirnetRecMutex*mutex);
int (*rec_mutex_trylock) (BirnetRecMutex*mutex);
void (*rec_mutex_unlock) (BirnetRecMutex*mutex);
void (*rec_mutex_destroy) (BirnetRecMutex*mutex);
void (*cond_init) (BirnetCond*cond);
void (*cond_signal) (BirnetCond*cond);
void (*cond_broadcast) (BirnetCond*cond);
void (*cond_wait) (BirnetCond*cond, BirnetMutex*mutex);
void (*cond_wait_timed) (BirnetCond*cond, BirnetMutex*mutex, BirnetInt64 max_useconds);
void (*cond_destroy) (BirnetCond*cond);
}; |