|
KallistiOS git master
Independent SDK for the Sega Dreamcast
|
C11 Threading API. More...
#include <sys/cdefs.h>#include <time.h>#include <kos/thread.h>#include <kos/once.h>#include <kos/mutex.h>#include <kos/cond.h>#include <kos/tls.h>Go to the source code of this file.
Macros | |
| #define | ONCE_FLAG_INIT KTHREAD_ONCE_INIT |
| Macro to initialize a once_flag object. | |
| #define | TSS_DTOR_ITERATIONS 1 |
| Maximum number of iterations over TSS destructors. | |
Return values | |
C11 Thread function return values Most of the C11 thread-related functions that return a result code return one of these. | |
| #define | thrd_success 0 |
| Success. | |
| #define | thrd_error -1 |
| Uncategorized error. | |
| #define | thrd_timedout -2 |
| Time out error. | |
| #define | thrd_busy -3 |
| Resource busy. | |
| #define | thrd_nomem -4 |
| Out of memory. | |
Mutex types | |
C11 mutual exclusion lock types These are the possible types of mutex locks that C11 allows for. Note that mtx_plain or mtx_recursive can be ORed with mtx_timed as well. | |
| #define | mtx_plain (1 << 0) |
| Plain mutex. | |
| #define | mtx_recursive (1 << 1) |
| Recursive mutex. | |
| #define | mtx_timed (1 << 2) |
| Mutex supporting the mtx_timedlock function. | |
Typedefs | |
| typedef kthread_once_t | once_flag |
| Object type backing call_once. | |
| typedef mutex_t | mtx_t |
| C11 mutual exclusion lock type. | |
| typedef condvar_t | cnd_t |
| C11 condition variable type. | |
| typedef kthread_t * | thrd_t |
| C11 thread identifier type. | |
| typedef int(* | thrd_start_t) (void *) |
| C11 thread start function type. | |
| typedef kthread_key_t | tss_t |
| C11 thread-specific storage type. | |
| typedef void(* | tss_dtor_t) (void *) |
| C11 thread-specific storage destructor type. | |
Functions | |
| void | call_once (once_flag *flag, void(*func)(void)) |
| Call a function one time, no matter how many threads try. | |
| void | mtx_destroy (mtx_t *mtx) |
| Deinitialize a mutex lock. | |
| int | mtx_init (mtx_t *mtx, int type) |
| Initialize a mutex lock. | |
| int | mtx_lock (mtx_t *mtx) |
| Lock a mutex lock. | |
| int | mtx_timedlock (mtx_t *__RESTRICT mtx, const struct timespec *__RESTRICT ts) |
| Lock a mutex lock with a timeout. | |
| int | mtx_trylock (mtx_t *mtx) |
| Attempt to acquire a mutex lock. | |
| int | mtx_unlock (mtx_t *mtx) |
| Unlock a previously acquired lock. | |
| int | cnd_broadcast (cnd_t *cond) |
| Broadcast to all threads locked on a condition variable. | |
| void | cnd_destroy (cnd_t *cond) |
| Deinitialize a condition variable. | |
| int | cnd_init (cnd_t *cond) |
| Initialize a condition variable. | |
| int | cnd_signal (cnd_t *cond) |
| Signal one thread locked on a condition variable. | |
| int | cnd_timedwait (cnd_t *__RESTRICT cond, mtx_t *__RESTRICT mtx, const struct timespec *__RESTRICT ts) |
| Wait on a condition variable (with a timeout). | |
| int | cnd_wait (cnd_t *cond, mtx_t *mtx) |
| Wait on a condition variable. | |
| int | thrd_create (thrd_t *thr, thrd_start_t func, void *arg) |
| Create and start a new thread. | |
| thrd_t | thrd_current (void) |
| Return the identifier of the currently running thread. | |
| int | thrd_detach (thrd_t thr) |
| Detach a running thread. | |
| int | thrd_equal (thrd_t thr0, thrd_t thr1) |
| Compare two threads for equality. | |
| _Noreturn void | thrd_exit (int res) |
| Terminate the current thread immediately. | |
| int | thrd_join (thrd_t thr, int *res) |
| Join a running thread. | |
| int | thrd_sleep (const struct timespec *duration, struct timespec *remaining) |
| Put the currently running thread to sleep. | |
| void | thrd_yield (void) |
| Yield the current thread's timeslice. | |
| int | tss_create (tss_t *key, tss_dtor_t dtor) |
| Create a thread-specific storage pointer. | |
| void | tss_delete (tss_t key) |
| Free resources associated with a thread-specific storage key. | |
| void * | tss_get (tss_t key) |
| Retrieve the value associated with a thread-specific storage key. | |
| int | tss_set (tss_t key, void *val) |
| Set the value associated with a thread-specific storage key. | |
C11 Threading API.
This file contains the definitions needed for using C11 threads. The C11 standard defines a number of threading-related primitives, which we wrap neatly around KOS' built-in threading support here.
If you compile your code with a strict standard set (you use a -std= flag with GCC that doesn't start with gnu), you must use -std=c11 to use this functionality. If you don't pass a -std= flag to GCC, then you're probably fine.