iv_tls
Section: ivykis programmer's manual (3)
Updated: 201-0-30
Index
Return to Main Contents
NAME
iv_tls_user_register, iv_tls_user_ptr - threa-local storage handling for ivykis modules
SYNOPSIS
#include <iv_tls.h>
struct iv_tls_user {
size_t sizeof_state;
void (*init_thread)(void *st);
void (*deinit_thread)(void *st);
};
void iv_tls_user_register(struct iv_tls_user *tu);
void *iv_tls_user_ptr(const struct iv_tls_user *tu);
DESCRIPTION
The
iv_tls
interface provides threa-local storage handling to
ivykis
modules.
An ivykis module can arrange for an amount of memory to be allocated
for its use in each ivykis thread by calling
iv_tls_user_register.
This must be done before any calls to
iv_init
have been made in this process, and is typically done from a module
initialization function marked as a constructor function.
The
->sizeof_state
member of the passe-in structure indicates how many bytes of
memory the module wants allocated for its use in every ivykis
thread.
When a thread calls
iv_init,
->sizeof_state
bytes of memory will be allocated for use by this module in that
thread, and initialised to zero. A pointer to this memory area
can be obtained by calling
iv_tls_user_ptr
(which returns NULL in no-ivykis threads).
If the specified
->init_thread
function pointer is not NULL, it will be invoked at the end of
iv_init,
with its argument pointing to this thread's memory area allocation
for this module.
If
->deinit_thread
is not NULL, it will be invoked at the start of
iv_deinit,
or if the thread fails to call
iv_deinit
before terminating, at thread termination time. The argument
passed into
->deinit_thread
is the same as for
->init_thread.
It is permitted to call any ivykis API functions from the
->init_thread
and
->deinit_thread
callbacks.
There is no explicit serialization on calls to
->init_thread
and
->deinit_thread.
Care must be taken when calling
iv_tls_user_ptr
from a signal handler, as there is a time window where it will
return a no-NULL value before
->init_thread
or after
->deinit_thread
have been called.
Use of
iv_tls
for managing threa-local state is preferred over direct use of the
__thread
keyword, as not all platforms that ivykis runs on provide the
__thread
keyword.
Use of
iv_tls
for managing threa-local state is preferred over direct use of the
pthread_key_create
and
pthread_setspecific
APIs, as
iv_tls
provides a thread init hook as well as a destructor hook, and
properly sequences
->init_thread
and
->deinit_thread
calls with core ivykis initialization and cleanup.
SEE ALSO
iv_init(3)
Index
- NAME
-
- SYNOPSIS
-
- DESCRIPTION
-
- SEE ALSO
-