globus_common  17.9
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
globus_thread_windows.h
1 
4 #if !defined GLOBUS_THREAD_WINDOWS_H
5 #define GLOBUS_THREAD_WINDOWS_H
6 
8 #include "globus_module.h"
9 #include "globus_time.h"
10 #include "globus_list.h"
11 
12 #define GLOBUS_NULL_POINTER_PARAMETER -1
13 #define globus_thread_once_t int
14 #define GLOBUS_THREAD_ONCE_INIT 0
15 #define GLOBUS_THREAD_ONCE_CALLED 1
16 
17 
18 typedef void * (*globus_thread_func_t)(void *user_arg);
19 typedef void (*globus_thread_key_destructor_func_t)(void *);
20 
21 typedef struct globus_thread_key_s
22 {
23  DWORD TLSIndex;
24  globus_thread_key_destructor_func_t destructorFunction;
26 
27 typedef struct globus_i_thread_t
28 {
29  unsigned long threadID;
30  UserFunctionInfo userFunctionInfo;
31  // list of keys associated with this thread
32  // that have destructor functions
33  globus_list_t * dataDestructionKeyList;
34 } globus_i_thread_t;
35 
36 typedef unsigned long globus_thread_t;
37 
38 typedef struct __globus_threadattr_t
39 {
40  void * threadAttribute;
42 
43 typedef struct _globus_mutexattr_t
44 {
45  LPSECURITY_ATTRIBUTES securityAttributes;
47 
48 typedef HANDLE globus_mutex_t;
49 
50 typedef struct _globus_condattr_t
51 {
52  LPSECURITY_ATTRIBUTES securityAttributes;
54 
55 typedef struct _globus_cond_t
56 {
57  HANDLE events[2];
58  int numberOfWaiters;
60 
61 /* typedef DWORD globus_abstime_t; */
62 
63 #ifdef __cplusplus
64 extern "C" {
65 #endif
66 
67 /* API calls */
68 extern int globus_thread_create(globus_thread_t *thread,
69  globus_threadattr_t *attr,
70  globus_thread_func_t func,
71  void *user_arg);
72 extern void globus_thread_exit(void *status);
73 
74 #define globus_macro_i_am_only_thread() GLOBUS_FALSE
75 
76 extern int globus_threadattr_init(globus_threadattr_t *attr);
77 extern int globus_threadattr_destroy(globus_threadattr_t *attr);
78 
80  globus_thread_key_destructor_func_t destructor_func);
83  void *value);
87  globus_thread_t t2);
88 extern int globus_thread_once(globus_thread_once_t *once_control,
89  void (*init_routine)(void));
90 extern void globus_thread_yield(void);
91 
93 
96 extern int globus_mutex_init(globus_mutex_t *mutex,
97  globus_mutexattr_t *attr);
98 extern int globus_mutex_destroy(globus_mutex_t *mutex);
99 extern int globus_mutex_lock(globus_mutex_t *mutex);
100 extern int globus_mutex_trylock(globus_mutex_t *mutex);
101 extern int globus_mutex_unlock(globus_mutex_t *mutex);
102 
103 extern int globus_condattr_init (globus_condattr_t *attr);
104 extern int globus_condattr_destroy (globus_condattr_t *attr);
105 extern int globus_cond_init(globus_cond_t *cond,
106  globus_condattr_t *attr);
107 extern int globus_cond_destroy(globus_cond_t *cond);
108 extern int globus_cond_wait(globus_cond_t *cond,
109  globus_mutex_t *mutex);
110 extern int globus_cond_timedwait(globus_cond_t *cond,
111  globus_mutex_t *mutex,
112  globus_abstime_t * abstime);
113 extern int globus_cond_timedwait_rel( globus_cond_t *cv,
114  globus_mutex_t *mut,
115  long milliseconds );
116 extern int globus_cond_signal(globus_cond_t *cond);
117 extern int globus_cond_broadcast(globus_cond_t *cond);
118 extern int globus_thread_cancel(globus_thread_t thread);
119 
120 
121 
122 /******************************************************************************
123  Module definition
124 ******************************************************************************/
125 
126 extern int globus_i_thread_pre_activate();
127 
128 extern globus_module_descriptor_t globus_i_thread_module;
129 
130 #define GLOBUS_THREAD_MODULE (&globus_i_thread_module)
131 
132 #ifdef __cplusplus
133 }
134 #endif
135 
136 #endif /* GLOBUS_THREAD_WINDOWS_H */
Thread ID.
Definition: globus_thread.h:55
int globus_cond_timedwait(globus_cond_t *cond, globus_mutex_t *mutex, globus_abstime_t *abstime)
Wait for a condition to be signalled.
Definition: globus_thread.c:614
globus_bool_t globus_i_am_only_thread(void)
Determine if threads are supported.
Definition: globus_thread.c:1615
int globus_cond_broadcast(globus_cond_t *cond)
Signal a condition to multiple threads.
Definition: globus_thread.c:689
int globus_cond_wait(globus_cond_t *cond, globus_mutex_t *mutex)
Wait for a condition to be signalled.
Definition: globus_thread.c:561
int globus_mutexattr_destroy(globus_mutexattr_t *attr)
Destroy a mutex attribute.
Definition: globus_thread.c:769
int globus_thread_key_delete(globus_thread_key_t key)
Delete a thread-local storage key.
Definition: globus_thread.c:1117
int globus_cond_destroy(globus_cond_t *cond)
Destroy a condition variable.
Definition: globus_thread.c:515
Thread attributes.
Definition: globus_thread.h:72
int globus_bool_t
Boolean type.
Definition: globus_types.h:78
Linked List.
int globus_mutex_destroy(globus_mutex_t *mutex)
Destroy a mutex.
Definition: globus_thread.c:291
void(* globus_thread_key_destructor_func_t)(void *value)
Thread-specific data destructor.
Definition: globus_thread.h:179
Reference Counting Module Activation and Deactivation.
int globus_mutex_init(globus_mutex_t *mutex, globus_mutexattr_t *attr)
Initialize a mutex.
Definition: globus_thread.c:252
void * globus_thread_getspecific(globus_thread_key_t key)
Get a thread-specific data value.
Definition: globus_thread.c:1262
int globus_cond_init(globus_cond_t *cond, globus_condattr_t *attr)
Initialize a condition variableThe globus_cond_init() function creates a condition variable that can ...
Definition: globus_thread.c:475
int globus_thread_setspecific(globus_thread_key_t key, void *value)
Set a thread-specific data value.
Definition: globus_thread.c:1324
List data type.
Definition: globus_list.h:28
Thread once structure.
Definition: globus_thread.h:210
Mutex.
Definition: globus_thread.h:91
int globus_mutexattr_init(globus_mutexattr_t *attr)
Initialize a mutex attribute.
Definition: globus_thread.c:730
globus_thread_t globus_thread_self(void)
Determine the current thread's ID.
Definition: globus_thread.c:1511
int globus_mutex_unlock(globus_mutex_t *mutex)
Unlock a mutex.
Definition: globus_thread.c:376
void globus_thread_yield(void)
Yield execution to another thread.
Definition: globus_thread.c:1356
Condition variable.
Definition: globus_thread.h:108
int globus_condattr_destroy(globus_condattr_t *cond_attr)
Destroy a condition attribute.
Definition: globus_thread.c:846
Condition variable attribute.
Definition: globus_thread.h:155
int globus_condattr_init(globus_condattr_t *cond_attr)
Initialize a condition variable attribute.
Definition: globus_thread.c:808
int globus_thread_once(globus_thread_once_t *once, void(*init_routine)(void))
Execute a function one time.
Definition: globus_thread.c:1199
Thread-specific data key.
Definition: globus_thread.h:185
void globus_thread_exit(void *value)
Terminate the current thread.
Definition: globus_thread.c:1381
int globus_thread_key_create(globus_thread_key_t *key, globus_thread_key_destructor_func_t destructor)
Create a key for thread-specific storage.
Definition: globus_thread.c:1074
int globus_thread_cancel(globus_thread_t thr)
Cancel a thread.
Definition: globus_thread.c:1712
int globus_mutex_lock(globus_mutex_t *mutex)
Lock a mutex.
Definition: globus_thread.c:334
globus_bool_t globus_thread_equal(globus_thread_t thread1, globus_thread_t thread2)
Check whether thread identifiers match.
Definition: globus_thread.c:1551
Time Types and Macros.
int globus_mutex_trylock(globus_mutex_t *mutex)
Lock a mutex if it is not locked.
Definition: globus_thread.c:420
int globus_thread_create(globus_thread_t *thread, globus_threadattr_t *attr, globus_thread_func_t func, void *user_arg)
Create a new thread.
Definition: globus_thread.c:993
int globus_cond_signal(globus_cond_t *cond)
Signal a condition to a thread.
Definition: globus_thread.c:652
Include System Headers.
Module Descriptor.
Definition: globus_module.h:54
Mutex attribute.
Definition: globus_thread.h:135