SphinxBase 5prealpha
sbthread.h File Reference

Simple portable thread functions. More...

#include <sphinx_config.h>
#include <sphinxbase/sphinxbase_export.h>
#include <sphinxbase/cmd_ln.h>

Go to the source code of this file.

Typedefs

typedef struct sbthread_s sbthread_t
 Thread object.
 
typedef struct sbmsgq_s sbmsgq_t
 Asynchronous message queue object.
 
typedef struct sbmtx_s sbmtx_t
 Mutex (critical section) object.
 
typedef struct sbevent_s sbevent_t
 Event object.
 
typedef int(* sbthread_main) (sbthread_t *th)
 Entry point for a thread.
 

Functions

SPHINXBASE_EXPORT sbthread_tsbthread_start (cmd_ln_t *config, sbthread_main func, void *arg)
 Start a new thread.
 
SPHINXBASE_EXPORT int sbthread_wait (sbthread_t *th)
 Wait for a thread to complete.
 
SPHINXBASE_EXPORT void sbthread_free (sbthread_t *th)
 Free a thread object.
 
SPHINXBASE_EXPORT cmd_ln_tsbthread_config (sbthread_t *th)
 Get configuration object from a thread.
 
SPHINXBASE_EXPORT void * sbthread_arg (sbthread_t *th)
 Get argument pointer from a thread.
 
SPHINXBASE_EXPORT sbmsgq_tsbthread_msgq (sbthread_t *th)
 Get message queue from a thread.
 
SPHINXBASE_EXPORT int sbthread_send (sbthread_t *th, size_t len, void const *data)
 Send an asynchronous message to a thread.
 
SPHINXBASE_EXPORT sbmsgq_tsbmsgq_init (size_t depth)
 Create a message queue.
 
SPHINXBASE_EXPORT void sbmsgq_free (sbmsgq_t *q)
 Free a message queue.
 
SPHINXBASE_EXPORT int sbmsgq_send (sbmsgq_t *q, size_t len, void const *data)
 Post a message to a queue.
 
SPHINXBASE_EXPORT void * sbmsgq_wait (sbmsgq_t *q, size_t *out_len, int sec, int nsec)
 Wait for a message from a queue.
 
SPHINXBASE_EXPORT sbmtx_tsbmtx_init (void)
 Create a mutex.
 
SPHINXBASE_EXPORT int sbmtx_trylock (sbmtx_t *mtx)
 Try to acquire a mutex.
 
SPHINXBASE_EXPORT int sbmtx_lock (sbmtx_t *mtx)
 Acquire a mutex.
 
SPHINXBASE_EXPORT int sbmtx_unlock (sbmtx_t *mtx)
 Release a mutex.
 
SPHINXBASE_EXPORT void sbmtx_free (sbmtx_t *mtx)
 Dispose of a mutex.
 
SPHINXBASE_EXPORT sbevent_tsbevent_init (void)
 Initialize an event.
 
SPHINXBASE_EXPORT void sbevent_free (sbevent_t *evt)
 Free an event.
 
SPHINXBASE_EXPORT int sbevent_signal (sbevent_t *evt)
 Signal an event.
 
SPHINXBASE_EXPORT int sbevent_wait (sbevent_t *evt, int sec, int nsec)
 Wait for an event to be signalled.
 

Detailed Description

Simple portable thread functions.

Author
David Huggins-Daines dhugg.nosp@m.ins@.nosp@m.cs.cm.nosp@m.u.ed.nosp@m.u

Definition in file sbthread.h.

Typedef Documentation

◆ sbevent_t

typedef struct sbevent_s sbevent_t

Event object.

Definition at line 77 of file sbthread.h.

◆ sbmsgq_t

typedef struct sbmsgq_s sbmsgq_t

Asynchronous message queue object.

Definition at line 67 of file sbthread.h.

◆ sbmtx_t

typedef struct sbmtx_s sbmtx_t

Mutex (critical section) object.

Definition at line 72 of file sbthread.h.

◆ sbthread_main

typedef int(* sbthread_main) (sbthread_t *th)

Entry point for a thread.

Definition at line 82 of file sbthread.h.

◆ sbthread_t

typedef struct sbthread_s sbthread_t

Thread object.

Definition at line 62 of file sbthread.h.

Function Documentation

◆ sbevent_free()

SPHINXBASE_EXPORT void sbevent_free ( sbevent_t * evt)

Free an event.

Definition at line 632 of file sbthread.c.

References ckd_free().

◆ sbevent_init()

SPHINXBASE_EXPORT sbevent_t * sbevent_init ( void )

Initialize an event.

Definition at line 611 of file sbthread.c.

References ckd_calloc, ckd_free(), E_ERROR, and E_ERROR_SYSTEM.

◆ sbevent_signal()

SPHINXBASE_EXPORT int sbevent_signal ( sbevent_t * evt)

Signal an event.

Definition at line 640 of file sbthread.c.

◆ sbevent_wait()

SPHINXBASE_EXPORT int sbevent_wait ( sbevent_t * evt,
int sec,
int nsec )

Wait for an event to be signalled.

Definition at line 652 of file sbthread.c.

◆ sbmsgq_free()

SPHINXBASE_EXPORT void sbmsgq_free ( sbmsgq_t * q)

Free a message queue.

Definition at line 465 of file sbthread.c.

References ckd_free().

Referenced by sbthread_free().

◆ sbmsgq_init()

SPHINXBASE_EXPORT sbmsgq_t * sbmsgq_init ( size_t depth)

Create a message queue.

Parameters
depthDepth of the queue.

Definition at line 444 of file sbthread.c.

References ckd_calloc, and ckd_free().

Referenced by sbthread_start().

◆ sbmsgq_send()

SPHINXBASE_EXPORT int sbmsgq_send ( sbmsgq_t * q,
size_t len,
void const * data )

Post a message to a queue.

Definition at line 475 of file sbthread.c.

Referenced by sbthread_send().

◆ sbmsgq_wait()

SPHINXBASE_EXPORT void * sbmsgq_wait ( sbmsgq_t * q,
size_t * out_len,
int sec,
int nsec )

Wait for a message from a queue.

Definition at line 555 of file sbthread.c.

◆ sbmtx_free()

SPHINXBASE_EXPORT void sbmtx_free ( sbmtx_t * mtx)

Dispose of a mutex.

Definition at line 702 of file sbthread.c.

References ckd_free().

◆ sbmtx_init()

SPHINXBASE_EXPORT sbmtx_t * sbmtx_init ( void )

Create a mutex.

Definition at line 671 of file sbthread.c.

References ckd_calloc, and ckd_free().

◆ sbmtx_lock()

SPHINXBASE_EXPORT int sbmtx_lock ( sbmtx_t * mtx)

Acquire a mutex.

Definition at line 690 of file sbthread.c.

◆ sbmtx_trylock()

SPHINXBASE_EXPORT int sbmtx_trylock ( sbmtx_t * mtx)

Try to acquire a mutex.

Definition at line 684 of file sbthread.c.

◆ sbmtx_unlock()

SPHINXBASE_EXPORT int sbmtx_unlock ( sbmtx_t * mtx)

Release a mutex.

Definition at line 696 of file sbthread.c.

◆ sbthread_arg()

SPHINXBASE_EXPORT void * sbthread_arg ( sbthread_t * th)

Get argument pointer from a thread.

Definition at line 716 of file sbthread.c.

◆ sbthread_config()

SPHINXBASE_EXPORT cmd_ln_t * sbthread_config ( sbthread_t * th)

Get configuration object from a thread.

Definition at line 710 of file sbthread.c.

◆ sbthread_free()

SPHINXBASE_EXPORT void sbthread_free ( sbthread_t * th)

Free a thread object.

Definition at line 734 of file sbthread.c.

References ckd_free(), sbmsgq_free(), and sbthread_wait().

Referenced by sbthread_start().

◆ sbthread_msgq()

SPHINXBASE_EXPORT sbmsgq_t * sbthread_msgq ( sbthread_t * th)

Get message queue from a thread.

Definition at line 722 of file sbthread.c.

◆ sbthread_send()

SPHINXBASE_EXPORT int sbthread_send ( sbthread_t * th,
size_t len,
void const * data )

Send an asynchronous message to a thread.

Each thread gets a message queue by default, so this is just a wrapper around sbmsgq_send().

Definition at line 728 of file sbthread.c.

References sbmsgq_send().

◆ sbthread_start()

SPHINXBASE_EXPORT sbthread_t * sbthread_start ( cmd_ln_t * config,
sbthread_main func,
void * arg )

Start a new thread.

Definition at line 406 of file sbthread.c.

References ckd_calloc, E_ERROR, sbmsgq_init(), and sbthread_free().

◆ sbthread_wait()

SPHINXBASE_EXPORT int sbthread_wait ( sbthread_t * th)

Wait for a thread to complete.

Definition at line 425 of file sbthread.c.

References E_ERROR.

Referenced by sbthread_free().