.TH "globus_thread.h" 3 "Sat Nov 8 2014" "Version 15.26" "globus_common" \" -*- nroff -*- .ad l .nh .SH NAME globus_thread.h \- .PP Globus Threading Abstraction\&. .SH SYNOPSIS .br .PP \fC#include 'globus_module\&.h'\fP .br \fC#include 'globus_time\&.h'\fP .br \fC#include \fP .br .SS "Data Structures" .in +1c .ti -1c .RI "union \fBglobus_thread_t\fP" .br .RI "\fIThread ID\&. \fP" .ti -1c .RI "union \fBglobus_threadattr_t\fP" .br .RI "\fIThread attributes\&. \fP" .ti -1c .RI "union \fBglobus_mutex_t\fP" .br .RI "\fIMutex\&. \fP" .ti -1c .RI "union \fBglobus_cond_t\fP" .br .RI "\fICondition variable\&. \fP" .ti -1c .RI "union \fBglobus_mutexattr_t\fP" .br .RI "\fIMutex attribute\&. \fP" .ti -1c .RI "union \fBglobus_condattr_t\fP" .br .RI "\fICondition variable attribute\&. \fP" .ti -1c .RI "union \fBglobus_thread_key_t\fP" .br .RI "\fIThread-specific data key\&. \fP" .ti -1c .RI "union \fBglobus_thread_once_t\fP" .br .RI "\fIThread once structure\&. \fP" .in -1c .SS "Macros" .in +1c .ti -1c .RI "#define \fBGLOBUS_THREAD_ONCE_INIT\fP { \&.none = 0 }" .br .RI "\fIThread once initializer value\&. \fP" .ti -1c .RI "#define \fBGLOBUS_THREAD_CANCEL_DISABLE\fP 0" .br .RI "\fIDisable thread cancellation value\&. \fP" .ti -1c .RI "#define \fBGLOBUS_THREAD_CANCEL_ENABLE\fP 1" .br .RI "\fIEnable thread cancellation value\&. \fP" .ti -1c .RI "#define \fBGLOBUS_THREAD_MODULE\fP (&globus_i_thread_module)" .br .RI "\fIThread Module\&. \fP" .in -1c .SS "Typedefs" .in +1c .ti -1c .RI "typedef void(* \fBglobus_thread_key_destructor_func_t\fP )(void *value)" .br .RI "\fIThread-specific data destructor\&. \fP" .in -1c .SS "Functions" .in +1c .ti -1c .RI "int \fBglobus_thread_set_model\fP (const char *model)" .br .RI "\fISelect threading model for an application\&. \fP" .ti -1c .RI "int \fBglobus_mutex_init\fP (\fBglobus_mutex_t\fP *mutex, \fBglobus_mutexattr_t\fP *attr)" .br .RI "\fIInitialize a mutex\&. \fP" .ti -1c .RI "int \fBglobus_mutex_destroy\fP (\fBglobus_mutex_t\fP *mutex)" .br .RI "\fIDestroy a mutex\&. \fP" .ti -1c .RI "int \fBglobus_mutex_lock\fP (\fBglobus_mutex_t\fP *mutex)" .br .RI "\fILock a mutex\&. \fP" .ti -1c .RI "int \fBglobus_mutex_unlock\fP (\fBglobus_mutex_t\fP *mutex)" .br .RI "\fIUnlock a mutex\&. \fP" .ti -1c .RI "int \fBglobus_mutex_trylock\fP (\fBglobus_mutex_t\fP *mutex)" .br .RI "\fILock a mutex if it is not locked\&. \fP" .ti -1c .RI "int \fBglobus_cond_init\fP (\fBglobus_cond_t\fP *cond, \fBglobus_condattr_t\fP *attr)" .br .RI "\fIInitialize a condition variable .PP The \fBglobus_cond_init()\fP function creates a condition variable that can be used for event signalling between threads\&. \fP" .ti -1c .RI "int \fBglobus_cond_destroy\fP (\fBglobus_cond_t\fP *cond)" .br .RI "\fIDestroy a condition variable\&. \fP" .ti -1c .RI "int \fBglobus_cond_wait\fP (\fBglobus_cond_t\fP *cond, \fBglobus_mutex_t\fP *mutex)" .br .RI "\fIWait for a condition to be signalled\&. \fP" .ti -1c .RI "int \fBglobus_cond_timedwait\fP (\fBglobus_cond_t\fP *cond, \fBglobus_mutex_t\fP *mutex, globus_abstime_t *abstime)" .br .RI "\fIWait for a condition to be signalled\&. \fP" .ti -1c .RI "int \fBglobus_cond_signal\fP (\fBglobus_cond_t\fP *cond)" .br .RI "\fISignal a condition to a thread\&. \fP" .ti -1c .RI "int \fBglobus_cond_broadcast\fP (\fBglobus_cond_t\fP *cond)" .br .RI "\fISignal a condition to multiple threads\&. \fP" .ti -1c .RI "int \fBglobus_condattr_init\fP (\fBglobus_condattr_t\fP *cond_attr)" .br .RI "\fIInitialize a condition variable attribute\&. \fP" .ti -1c .RI "int \fBglobus_condattr_destroy\fP (\fBglobus_condattr_t\fP *cond_attr)" .br .RI "\fIDestroy a condition attribute\&. \fP" .ti -1c .RI "int \fBglobus_condattr_setspace\fP (\fBglobus_condattr_t\fP *cond_attr, int space)" .br .RI "\fISet callback space associated with a condition variable attribute .PP The \fBglobus_condattr_setspace()\fP function sets the callback space to use with condition variables created with this attribute\&. Callback spaces are used to control how callbacks are issued to different threads\&. See \fBCallback Spaces \fP for more information on callback spaces\&. \fP" .ti -1c .RI "int \fBglobus_condattr_getspace\fP (\fBglobus_condattr_t\fP *cond_attr, int *space)" .br .RI "\fIGet callback space associated with a condition variable attribute .PP The \fBglobus_condattr_getspace()\fP function copies the value of the callback space associated with a condition variable attribute to the integer pointed to by the \fIspace\fP parameter\&. \fP" .ti -1c .RI "int \fBglobus_thread_create\fP (\fBglobus_thread_t\fP *thread, \fBglobus_threadattr_t\fP *attr, globus_thread_func_t func, void *user_arg)" .br .RI "\fICreate a new thread\&. \fP" .ti -1c .RI "void * \fBglobus_thread_getspecific\fP (\fBglobus_thread_key_t\fP key)" .br .RI "\fIGet a thread-specific data value\&. \fP" .ti -1c .RI "int \fBglobus_thread_setspecific\fP (\fBglobus_thread_key_t\fP key, void *value)" .br .RI "\fISet a thread-specific data value\&. \fP" .ti -1c .RI "int \fBglobus_thread_key_create\fP (\fBglobus_thread_key_t\fP *key, \fBglobus_thread_key_destructor_func_t\fP func)" .br .RI "\fICreate a key for thread-specific storage\&. \fP" .ti -1c .RI "int \fBglobus_thread_key_delete\fP (\fBglobus_thread_key_t\fP key)" .br .RI "\fIDelete a thread-local storage key\&. \fP" .ti -1c .RI "int \fBglobus_thread_once\fP (\fBglobus_thread_once_t\fP *once, void(*init_routine)(void))" .br .RI "\fIExecute a function one time\&. \fP" .ti -1c .RI "void \fBglobus_thread_yield\fP (void)" .br .RI "\fIYield execution to another thread\&. \fP" .ti -1c .RI "int \fBglobus_thread_sigmask\fP (int how, const sigset_t *newmask, sigset_t *oldmask)" .br .RI "\fIModify the current thread's signal mask\&. \fP" .ti -1c .RI "int \fBglobus_thread_kill\fP (\fBglobus_thread_t\fP thread, int sig)" .br .RI "\fISend a signal to a thread\&. \fP" .ti -1c .RI "void \fBglobus_thread_exit\fP (void *value)" .br .RI "\fITerminate the current thread\&. \fP" .ti -1c .RI "\fBglobus_thread_t\fP \fBglobus_thread_self\fP (void)" .br .RI "\fIDetermine the current thread's ID\&. \fP" .ti -1c .RI "int \fBglobus_thread_equal\fP (\fBglobus_thread_t\fP thread1, \fBglobus_thread_t\fP thread2)" .br .RI "\fICheck whether thread identifiers match\&. \fP" .ti -1c .RI "\fBglobus_bool_t\fP \fBglobus_i_am_only_thread\fP (void)" .br .RI "\fIDetermine if threads are supported\&. \fP" .ti -1c .RI "\fBglobus_bool_t\fP \fBglobus_thread_preemptive_threads\fP (void)" .br .RI "\fIIndicate whether the active thread model supports preemption\&. \fP" .ti -1c .RI "void * \fBglobus_thread_cancellable_func\fP (void *(*func)(void *), void *arg, void(*cleanup_func)(void *), void *cleanup_arg, \fBglobus_bool_t\fP execute_cleanup)" .br .RI "\fIExecute a function with thread cleanup in case of cancellation\&. \fP" .ti -1c .RI "int \fBglobus_thread_cancel\fP (\fBglobus_thread_t\fP thr)" .br .RI "\fICancel a thread\&. \fP" .ti -1c .RI "void \fBglobus_thread_testcancel\fP (void)" .br .RI "\fIThread cancellation point\&. \fP" .ti -1c .RI "int \fBglobus_thread_setcancelstate\fP (int state, int *oldstate)" .br .RI "\fISet the thread's cancellable state\&. \fP" .in -1c .SH "Detailed Description" .PP Globus Threading Abstraction\&. Globus threads package which can work with either pthreads or without threads, depending on runtime configuration .SH "Author" .PP Generated automatically by Doxygen for globus_common from the source code\&.