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_t * | sbthread_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_t * | sbthread_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_t * | sbthread_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_t * | sbmsgq_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_t * | sbmtx_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_t * | sbevent_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

  depth | Depth 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().