18 #ifndef __STARPU_THREAD_H__
19 #define __STARPU_THREAD_H__
23 #include <xbt/synchro_core.h>
24 #ifdef STARPU_HAVE_SIMGRID_MSG_H
25 #include <simgrid/msg.h>
29 #elif !defined(_MSC_VER) || defined(BUILDING_STARPU)
44 typedef int starpu_pthread_t;
45 typedef int starpu_pthread_attr_t;
47 int starpu_pthread_create_on(
char *name, starpu_pthread_t *thread,
const starpu_pthread_attr_t *attr,
void *(*start_routine) (
void *),
void *arg, msg_host_t host);
48 int starpu_pthread_create(starpu_pthread_t *thread,
const starpu_pthread_attr_t *attr,
void *(*start_routine) (
void *),
void *arg);
54 #elif !defined(_MSC_VER) || defined(BUILDING_STARPU)
56 typedef pthread_t starpu_pthread_t;
57 typedef pthread_attr_t starpu_pthread_attr_t;
59 #define starpu_pthread_create pthread_create
60 #define starpu_pthread_create_on(name, thread, attr, routine, arg, where) starpu_pthread_create(thread, attr, routine, arg)
61 #define starpu_pthread_join pthread_join
62 #define starpu_pthread_attr_init pthread_attr_init
63 #define starpu_pthread_attr_destroy pthread_attr_destroy
64 #define starpu_pthread_attr_setdetachstate pthread_attr_setdetachstate
73 typedef xbt_mutex_t starpu_pthread_mutex_t;
74 typedef int starpu_pthread_mutexattr_t;
76 #define STARPU_PTHREAD_MUTEX_INITIALIZER NULL
84 #elif !defined(_MSC_VER) || defined(BUILDING_STARPU)
86 typedef pthread_mutex_t starpu_pthread_mutex_t;
87 typedef pthread_mutexattr_t starpu_pthread_mutexattr_t;
89 #define starpu_pthread_mutex_init pthread_mutex_init
90 #define starpu_pthread_mutex_destroy pthread_mutex_destroy
91 #define starpu_pthread_mutex_lock pthread_mutex_lock
92 #define starpu_pthread_mutex_unlock pthread_mutex_unlock
93 #define starpu_pthread_mutex_trylock pthread_mutex_trylock
95 #define STARPU_PTHREAD_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
102 #ifdef STARPU_SIMGRID
104 typedef int starpu_pthread_key_t;
110 #elif !defined(_MSC_VER) || defined(BUILDING_STARPU)
112 typedef pthread_key_t starpu_pthread_key_t;
114 #define starpu_pthread_key_create pthread_key_create
115 #define starpu_pthread_key_delete pthread_key_delete
116 #define starpu_pthread_setspecific pthread_setspecific
117 #define starpu_pthread_getspecific pthread_getspecific
125 #ifdef STARPU_SIMGRID
127 typedef xbt_cond_t starpu_pthread_cond_t;
128 typedef int starpu_pthread_condattr_t;
129 #define STARPU_PTHREAD_COND_INITIALIZER NULL
138 #elif !defined(_MSC_VER) || defined(BUILDING_STARPU)
140 typedef pthread_cond_t starpu_pthread_cond_t;
141 typedef pthread_condattr_t starpu_pthread_condattr_t;
142 #define STARPU_PTHREAD_COND_INITIALIZER PTHREAD_COND_INITIALIZER
144 #define starpu_pthread_cond_init pthread_cond_init
145 #define starpu_pthread_cond_signal pthread_cond_signal
146 #define starpu_pthread_cond_broadcast pthread_cond_broadcast
147 #define starpu_pthread_cond_wait pthread_cond_wait
148 #define starpu_pthread_cond_timedwait pthread_cond_timedwait
149 #define starpu_pthread_cond_destroy pthread_cond_destroy
157 #ifdef STARPU_SIMGRID
159 typedef xbt_mutex_t starpu_pthread_rwlock_t;
160 typedef int starpu_pthread_rwlockattr_t;
165 int starpu_pthread_rwlock_tryrdlock(starpu_pthread_rwlock_t *rwlock);
167 int starpu_pthread_rwlock_trywrlock(starpu_pthread_rwlock_t *rwlock);
170 #elif !defined(_MSC_VER) || defined(BUILDING_STARPU)
172 typedef pthread_rwlock_t starpu_pthread_rwlock_t;
173 typedef pthread_rwlockattr_t starpu_pthread_rwlockattr_t;
175 #define starpu_pthread_rwlock_init pthread_rwlock_init
176 #define starpu_pthread_rwlock_destroy pthread_rwlock_destroy
177 #define starpu_pthread_rwlock_rdlock pthread_rwlock_rdlock
178 #define starpu_pthread_rwlock_tryrdlock pthread_rwlock_tryrdlock
179 #define starpu_pthread_rwlock_wrlock pthread_rwlock_wrlock
180 #define starpu_pthread_rwlock_trywrlock pthread_rwlock_trywrlock
181 #define starpu_pthread_rwlock_unlock pthread_rwlock_unlock
189 #if defined(STARPU_SIMGRID) || (!defined(STARPU_HAVE_PTHREAD_BARRIER) && (!defined(_MSC_VER) || defined(BUILDING_STARPU)))
192 starpu_pthread_mutex_t mutex;
193 starpu_pthread_cond_t cond;
194 starpu_pthread_cond_t cond_destroy;
199 typedef int starpu_pthread_barrierattr_t;
200 #define STARPU_PTHREAD_BARRIER_SERIAL_THREAD -1
202 int starpu_pthread_barrier_init(
starpu_pthread_barrier_t *barrier,
const starpu_pthread_barrierattr_t *attr,
unsigned count);
206 #elif !defined(_MSC_VER)
209 typedef pthread_barrierattr_t starpu_pthread_barrierattr_t;
211 #define starpu_pthread_barrier_init pthread_barrier_init
212 #define starpu_pthread_barrier_destroy pthread_barrier_destroy
213 #define starpu_pthread_barrier_wait pthread_barrier_wait
214 #define STARPU_PTHREAD_BARRIER_SERIAL_THREAD PTHREAD_BARRIER_SERIAL_THREAD
218 #if defined(_MSC_VER) && !defined(BUILDING_STARPU)
219 typedef void* starpu_pthread_rwlock_t;
220 typedef void* starpu_pthread_mutex_t;
221 typedef void* starpu_pthread_cond_t;
222 typedef void* starpu_pthread_barrier_t;