Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

iv_tls_user_register(3) [debian man page]

iv_tls(3)						    ivykis programmer's manual							 iv_tls(3)

NAME
iv_tls_user_register, iv_tls_user_ptr - thread-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(struct iv_tls_user *tu); DESCRIPTION
The iv_tls interface provides thread-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 passed-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 non-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 non-NULL value before ->init_thread or after ->deinit_thread have been called. Use of iv_tls for managing thread-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 thread-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) ivykis 2012-03-30 iv_tls(3)

Check Out this Related Man Page

iv_task(3)						    ivykis programmer's manual							iv_task(3)

NAME
iv_task_register, iv_task_unregister, iv_task_registered - deal with ivykis tasks SYNOPSIS
#include <iv.h> struct iv_task { void *cookie; void (*handler)(void *); }; void IV_TASK_INIT(struct iv_task *task); void iv_task_register(struct iv_task *task); void iv_task_unregister(struct iv_task *task); int iv_task_registered(struct iv_task *task); DESCRIPTION
The functions iv_task_register and iv_task_unregister register, respectively unregister, a task with the current thread's ivykis event loop. iv_task_registered on a task returns true if that task is currently registered with ivykis. A task is like a timer, but with an immediate timeout. When a task is registered, unless it is unregistered again first, the callback function specified by ->handler is guaranteed to be called once, in the thread that the task was registered in, some time after control returns to the ivykis main loop but before ivykis will sleep for more events, with ->cookie as its first and sole argument. When this hap- pens, the task is transparently unregistered. Tasks are mainly used for scheduling code for execution where it is not appropriate to directly run that code in the calling context (for example, because the current context might be run as a callback function where the caller expects certain conditions to remain invariant after the callback completes). The application is allowed to change the ->cookie and ->handler members at any time. A given struct iv_task can only be registered in one thread at a time, and a task can only be unregistered in the thread that it was regis- tered from. There is no limit on the number of tasks registered at once. See iv_examples(3) for programming examples. SEE ALSO
ivykis(3), iv_examples(3) ivykis 2010-08-15 iv_task(3)
Man Page