The thread API wrapper is an RDR-discoverable interface that provides access to a set of thread management calls. More...
Files | |
file | threadapi.h |
Header file defining the Threads interface. | |
file | ggsthreads.c |
Platform dependent parts of the threads API implementation for Windows. | |
file | threadcommon.c |
Platform independent parts of the threads API implementation. | |
file | threadcommon.h |
Platform independent parts of the threads API implementation. | |
Data Structures | |
struct | sw_pthread_api_20171022 |
Thread API version sw_pthread_api_20171022 is a strict superset of the functionality in the sw_pthread_api_20111021 version of the thread interface. This is deliberate choice, and the layout of the 20111021 version is a prefix of the 20171022 version so a pointer to the latter may be used where a instance of the former is required. More... | |
struct | sw_pthread_api_20111021 |
Thread API version sw_pthread_api_20111021 is a strict superset of the functionality in the sw_pthread_api_20071026 version of the thread interface. This is deliberate choice, and the layout of the 20071026 version is a prefix of the 20111021 version so a pointer to the latter may be used where a instance of the former is required. More... | |
struct | sw_pthread_api_20071026 |
Thread API version sw_pthread_api_20071026 . More... | |
Macros | |
#define | pthread_attr_init pthread_api->attr_init |
Initialize an attribute structure to pass non-default attributes to pthread_create(). More... | |
#define | pthread_attr_destroy pthread_api->attr_destroy |
Destroy an attribute structure previously initialized with pthread_attr_init(). More... | |
#define | pthread_attr_setdetachstate pthread_api->attr_setdetachstate |
Set the detach state of a thread attributes structure. More... | |
#define | pthread_create pthread_api->create |
Create a thread. More... | |
#define | pthread_join pthread_api->join |
Wait until a thread has been terminated. More... | |
#define | pthread_mutexattr_init pthread_api->mutexattr_init |
Initialize a mutex attribute structure to pass non-default attributes to pthread_mutex_init(). More... | |
#define | pthread_mutexattr_destroy pthread_api->mutexattr_destroy |
Destroy an attribute structure previously initialized with pthread_mutexattr_init(). More... | |
#define | pthread_mutexattr_getpshared pthread_api->mutexattr_getpshared |
Return the value of the process-shared attribute of the mutex attribute. More... | |
#define | pthread_mutexattr_setpshared pthread_api->mutexattr_setpshared |
Set a mutex attribute's process-shared attribute. More... | |
#define | pthread_mutexattr_settype pthread_api->mutexattr_settype |
Set a mutex attribute type. More... | |
#define | pthread_mutexattr_gettype pthread_api->mutexattr_gettype |
Return the value of the type attribute of the mutex attribute. More... | |
#define | pthread_mutex_init pthread_api->mutex_init |
Initialize a mutex object. More... | |
#define | pthread_mutex_destroy pthread_api->mutex_destroy |
Destroy a mutex object. More... | |
#define | pthread_mutex_lock pthread_api->mutex_lock |
Lock a mutex object. More... | |
#define | pthread_mutex_trylock pthread_api->mutex_trylock |
Try to lock a mutex object. More... | |
#define | pthread_mutex_unlock pthread_api->mutex_unlock |
Unlock a mutex object. More... | |
#define | pthread_cond_init pthread_api->cond_init |
Initialize a condition object. More... | |
#define | pthread_cond_destroy pthread_api->cond_destroy |
Destroy a condition object. More... | |
#define | pthread_cond_wait pthread_api->cond_wait |
Wait for a condition object to be signalled. More... | |
#define | pthread_cond_timedwait pthread_api->cond_timedwait |
Wait for a condition object to be signalled. More... | |
#define | pthread_cond_signal pthread_api->cond_signal |
Unblock at least one thread waiting on a condition object. More... | |
#define | pthread_cond_broadcast pthread_api->cond_broadcast |
Unblock all threads waiting on a condition object. More... | |
#define | pthread_key_create pthread_api->key_create |
Create a thread-local storage key. More... | |
#define | pthread_key_delete pthread_api->key_delete |
Delete a thread-local storage key previously created with pthread_key_create(). More... | |
#define | pthread_setspecific pthread_api->setspecific |
Set the value of a specified thread-local key for the current thread. More... | |
#define | pthread_getspecific pthread_api->getspecific |
Get the value of a specified thread-local key for the current thread. More... | |
#define | set_thread_name pthread_api->set_thread_name |
Set a thread name for debugging. More... | |
#define | get_time_from_now pthread_api->time_from_now |
Get the representation of time at given offset in the future from the current time, as a time since the epoch. All times are in microsecond units. More... | |
#define | hqtime_to_timespec pthread_api->hqtime_to_timespec |
Convert an HqU32x2 created by get_time_from_now() to a struct timespec suitable for pthread_cond_timedwait(). More... | |
Functions | |
HqBool | load_pthreads_dll (const char *dll_name, char **error_string) |
Load the pthreads library. More... | |
HqBool | unload_pthreads_dll (void) |
Unload the pthreads library. More... | |
The thread API wrapper is an RDR-discoverable interface that provides access to a set of thread management calls.
These calls are based on the Posix pthreads API, but not all calls in the pthreads API are exposed through this API. There are additional calls, e.g., to add debug names for threads, and to manage time manipulations suitable for passing to the pthreads API.
A thread API pointer must be discovered using RIP Data Resource (RDR) System using class RDR_CLASS_API and type RDR_API_PTHREADS and assigned to a suitably-named API pointer variable before the API macros are used. The application layer must set the thread API pointer before almost any SDK or core library call can be made.
#define get_time_from_now pthread_api->time_from_now |
Get the representation of time at given offset in the future from the current time, as a time since the epoch. All times are in microsecond units.
[in,out] | time | On invocation, *time contains an offset into the future. On completion, *time is updated to represent that future time relative to the epoch. |
#define hqtime_to_timespec pthread_api->hqtime_to_timespec |
Convert an HqU32x2 created by get_time_from_now() to a struct timespec
suitable for pthread_cond_timedwait().
[in] | hq_time | A time created by get_time_from_now(). |
[out] | spec_time | A time specification suitable for passing to pthread_cond_timedwait(). |
#define pthread_attr_destroy pthread_api->attr_destroy |
Destroy an attribute structure previously initialized with pthread_attr_init().
[out] | attr | Pointer to a thread attributes object to destroy. |
See the Posix pthread_attr_destroy() specification for more detail.
#define pthread_attr_init pthread_api->attr_init |
Initialize an attribute structure to pass non-default attributes to pthread_create().
[out] | attr | Pointer to a thread attributes object to initialize. |
See the Posix pthread_attr_init() specification for more detail.
#define pthread_attr_setdetachstate pthread_api->attr_setdetachstate |
Set the detach state of a thread attributes structure.
[out] | attr | Pointer to a thread attributes object to destroy. |
[in] | detachstate | Either PTHREAD_CREATE_DETACHED or PTHREAD_CREATE_JOINABLE . |
See the Posix pthread_attr_setdetachstate() specification for more detail.
#define pthread_cond_broadcast pthread_api->cond_broadcast |
Unblock all threads waiting on a condition object.
[in,out] | cond | A pointer to a condition object to signal. |
See the Posix pthread_cond_broadcast() specification for more detail.
#define pthread_cond_destroy pthread_api->cond_destroy |
Destroy a condition object.
[in] | cond | A pointer to a condition object to destroy. |
See the Posix pthread_cond_destroy() specification for more detail.
#define pthread_cond_init pthread_api->cond_init |
Initialize a condition object.
[out] | cond | A pointer to a condition object to initialize. |
[in] | attr | A condition attributes structure, or NULL to use the default condition attributes. |
NULL
). The ZMQ library used in the Scalable RIP may pass non-NULL
values of attr on some platforms.See the Posix pthread_cond_init() specification for more detail.
#define pthread_cond_signal pthread_api->cond_signal |
Unblock at least one thread waiting on a condition object.
[in,out] | cond | A pointer to a condition object to signal. |
See the Posix pthread_cond_signal() specification for more detail.
#define pthread_cond_timedwait pthread_api->cond_timedwait |
Wait for a condition object to be signalled.
[in,out] | cond | A pointer to a condition object to wait on. |
[in,out] | mutex | A mutex to release and re-lock around the condition wait. |
[in] | timespec | A pointer to a time to stop waiting for the condition. A suitable time specification can be constructed by calling get_time_from_now() to get an end time relative to the current time, and then calling hqtime_to_timespec() to convert it to a struct timespec suitable for this parameter. |
ETIMEDOUT
if timed out; otherwise an error number.See the Posix pthread_cond_timedwait() specification for more detail.
#define pthread_cond_wait pthread_api->cond_wait |
Wait for a condition object to be signalled.
[in,out] | cond | A pointer to a condition object to wait on. |
[in,out] | mutex | A mutex to release and re-lock around the condition wait. |
See the Posix pthread_cond_wait() specification for more detail.
#define pthread_create pthread_api->create |
Create a thread.
[out] | thread | Location to store the new thread ID if successful. |
[in] | attr | A thread attributes structure, or NULL to use the default thread attributes. |
[in] | start | A function to run on the new thread, taking arg as its sole argument. |
[in] | arg | A pointer to pass to start when executed by the new thread. |
See the Posix pthread_create() specification for more detail.
#define pthread_getspecific pthread_api->getspecific |
Get the value of a specified thread-local key for the current thread.
[in] | key | A thread-local key previously created with pthread_key_create(). |
NULL
if it has not been set for this thread.See the Posix pthread_key_getspecific() specification for more detail.
#define pthread_join pthread_api->join |
Wait until a thread has been terminated.
[in] | thread | Location to store the new thread ID if successful. |
[out] | presult | An optional pointer to receive the return value of the thread start function. |
See the Posix pthread_join() specification for more detail.
#define pthread_key_create pthread_api->key_create |
Create a thread-local storage key.
[out] | key | Location to store the thread-local key if successful. |
[in] | destructor | The destructor parameter should be NULL , it is not used by the Harlequin core library or SDK, and is not supported on all platform implementations. |
See the Posix pthread_key_create() specification for more detail.
#define pthread_key_delete pthread_api->key_delete |
Delete a thread-local storage key previously created with pthread_key_create().
[in] | key | The thread-local key to delete. |
See the Posix pthread_key_delete() specification for more detail.
#define pthread_mutex_destroy pthread_api->mutex_destroy |
Destroy a mutex object.
[out] | mutex | A pointer to a mutex object to destroy. |
See the Posix pthread_mutex_destroy() specification for more detail.
#define pthread_mutex_init pthread_api->mutex_init |
Initialize a mutex object.
[out] | mutex | A pointer to a mutex object to initialize. |
[in] | attr | A mutex attributes structure, or NULL to use the default mutex attributes. |
See the Posix pthread_mutex_init() specification for more detail.
#define pthread_mutex_lock pthread_api->mutex_lock |
Lock a mutex object.
[in,out] | mutex | A pointer to a mutex object to lock. |
See the Posix pthread_mutex_lock() specification for more detail.
#define pthread_mutex_trylock pthread_api->mutex_trylock |
Try to lock a mutex object.
[in,out] | mutex | A pointer to a mutex object to lock. |
EBUSY
if the mutex is already locked; otherwise an error number.See the Posix pthread_mutex_trylock() specification for more detail.
#define pthread_mutex_unlock pthread_api->mutex_unlock |
Unlock a mutex object.
[in,out] | mutex | A pointer to a mutex object to unlock. |
See the Posix pthread_mutex_unlock() specification for more detail.
#define pthread_mutexattr_destroy pthread_api->mutexattr_destroy |
Destroy an attribute structure previously initialized with pthread_mutexattr_init().
[out] | attr | Pointer to a mutex thread attributes object to destroy. |
See the Posix pthread_mutexattr_destroy() specification for more detail.
#define pthread_mutexattr_getpshared pthread_api->mutexattr_getpshared |
Return the value of the process-shared attribute of the mutex attribute.
[in] | attr | A mutex attribute object. |
[out] | pshared | A location to store the process-shared attribute. |
NULL
in the API structure.See the Posix pthread_mutexattr_getpshared() specification for more detail.
#define pthread_mutexattr_gettype pthread_api->mutexattr_gettype |
Return the value of the type attribute of the mutex attribute.
[in] | attr | A mutex attribute object. |
[out] | ptype | A location to store the type attribute. |
NULL
in the API structure.See the Posix pthread_mutexattr_gettype() specification for more detail.
#define pthread_mutexattr_init pthread_api->mutexattr_init |
Initialize a mutex attribute structure to pass non-default attributes to pthread_mutex_init().
[out] | attr | Pointer to a mutex attributes object to initialize. |
See the Posix pthread_mutexattr_init() specification for more detail.
#define pthread_mutexattr_setpshared pthread_api->mutexattr_setpshared |
Set a mutex attribute's process-shared attribute.
[out] | attr | A mutex attribute object. |
[in] | shared | Either PTHREAD_PROCESS_PRIVATE or PTHREAD_PROCESS_SHARED . |
NULL
in the API structure.See the Posix pthread_mutexattr_setpshared() specification for more detail.
#define pthread_mutexattr_settype pthread_api->mutexattr_settype |
Set a mutex attribute type.
[out] | attr | A mutex attribute object. |
[in] | type | One of PTHREAD_MUTEX_NORMAL , PTHREAD_MUTEX_ERRORCHECK , PTHREAD_MUTEX_RECURSIVE , or PTHREAD_MUTEX_DEFAULT . |
PTHREAD_MUTEX_ERRORCHECK
or PTHREAD_MUTEX_RECURSIVE
. Mutexes are also created using default attributes by passing a NULL
attributes pointer to pthread_mutex_init().See the Posix pthread_mutexattr_settype() specification for more detail.
#define pthread_setspecific pthread_api->setspecific |
Set the value of a specified thread-local key for the current thread.
[in] | key | A thread-local key previously created with pthread_key_create(). |
[in] | value | The value to set this thread-local key to. |
See the Posix pthread_key_setspecific() specification for more detail.
#define set_thread_name pthread_api->set_thread_name |
Set a thread name for debugging.
[in] | name | The name to use for the current thread. This may be changed during execution to reflect current usage of the thread. |
HqBool load_pthreads_dll | ( | const char * | dll_name, |
char ** | error_string | ||
) |
Load the pthreads library.
[in] | dll_name | The leafname of the dynamically load library. The library is searched for using the library search path. This leafname be NULL, in which case the default library leafname will be used. |
[out] | error_string | A pointer to receive an error string. |
TRUE | if the pthreads library was loaded. |
FALSE | if the pthreads library was not loaded. If the library was not loaded, then an error string is set through the error_string pointer. |
This call is required on Windows. It is a stub on other platforms.
HqBool unload_pthreads_dll | ( | void | ) |
Unload the pthreads library.
TRUE | if the pthreads library was unloaded cleanly. |
FALSE | if the pthreads library was not unloaded cleanly. |
This call is required on Windows. It is a stub on other platforms.