18 #ifndef __STARPU_THREAD_UTIL_H__
19 #define __STARPU_THREAD_UTIL_H__
28 #define STARPU_PTHREAD_CREATE_ON(name, thread, attr, routine, arg, where) do { \
29 int p_ret = starpu_pthread_create_on((name), (thread), (attr), (routine), (arg), (where)); \
30 if (STARPU_UNLIKELY(p_ret != 0)) { \
32 "%s:%d starpu_pthread_create_on: %s\n", \
33 __FILE__, __LINE__, strerror(p_ret)); \
38 #define STARPU_PTHREAD_CREATE(thread, attr, routine, arg) do { \
39 int p_ret = starpu_pthread_create((thread), (attr), (routine), (arg)); \
40 if (STARPU_UNLIKELY(p_ret != 0)) { \
42 "%s:%d starpu_pthread_create: %s\n", \
43 __FILE__, __LINE__, strerror(p_ret)); \
52 #define STARPU_PTHREAD_MUTEX_INIT(mutex, attr) do { \
53 int p_ret = starpu_pthread_mutex_init((mutex), (attr)); \
54 if (STARPU_UNLIKELY(p_ret)) { \
56 "%s:%d starpu_pthread_mutex_init: %s\n", \
57 __FILE__, __LINE__, strerror(p_ret)); \
62 #define STARPU_PTHREAD_MUTEX_DESTROY(mutex) do { \
63 int p_ret = starpu_pthread_mutex_destroy(mutex); \
64 if (STARPU_UNLIKELY(p_ret)) { \
66 "%s:%d starpu_pthread_mutex_destroy: %s\n", \
67 __FILE__, __LINE__, strerror(p_ret)); \
72 #define STARPU_PTHREAD_MUTEX_LOCK(mutex) do { \
73 int p_ret = starpu_pthread_mutex_lock(mutex); \
74 if (STARPU_UNLIKELY(p_ret)) { \
76 "%s:%d starpu_pthread_mutex_lock: %s\n", \
77 __FILE__, __LINE__, strerror(p_ret)); \
82 #define STARPU_PTHREAD_MUTEX_TRYLOCK(mutex) \
83 _STARPU_PTHREAD_MUTEX_TRYLOCK(mutex, __FILE__, __LINE__)
85 int _STARPU_PTHREAD_MUTEX_TRYLOCK(starpu_pthread_mutex_t *mutex,
char *file,
int line)
90 "%s:%d starpu_pthread_mutex_trylock: %s\n",
91 file, line, strerror(p_ret));
97 #define STARPU_PTHREAD_MUTEX_UNLOCK(mutex) do { \
98 int p_ret = starpu_pthread_mutex_unlock(mutex); \
99 if (STARPU_UNLIKELY(p_ret)) { \
101 "%s:%d starpu_pthread_mutex_unlock: %s\n", \
102 __FILE__, __LINE__, strerror(p_ret)); \
110 #define STARPU_PTHREAD_KEY_CREATE(key, destr) do { \
111 int p_ret = starpu_pthread_key_create((key), (destr)); \
112 if (STARPU_UNLIKELY(p_ret != 0)) { \
114 "%s:%d starpu_pthread_key_create: %s\n", \
115 __FILE__, __LINE__, strerror(p_ret)); \
119 #define STARPU_PTHREAD_KEY_DELETE(key) do { \
120 int p_ret = starpu_pthread_key_delete((key)); \
121 if (STARPU_UNLIKELY(p_ret != 0)) { \
123 "%s:%d starpu_pthread_key_delete: %s\n", \
124 __FILE__, __LINE__, strerror(p_ret)); \
128 #define STARPU_PTHREAD_SETSPECIFIC(key, ptr) do { \
129 int p_ret = starpu_pthread_setspecific((key), (ptr)); \
130 if (STARPU_UNLIKELY(p_ret != 0)) { \
132 "%s:%d starpu_pthread_setspecific: %s\n", \
133 __FILE__, __LINE__, strerror(p_ret)); \
137 #define STARPU_PTHREAD_GETSPECIFIC(key) starpu_pthread_getspecific((key))
142 #define STARPU_PTHREAD_RWLOCK_INIT(rwlock, attr) do { \
143 int p_ret = starpu_pthread_rwlock_init((rwlock), (attr)); \
144 if (STARPU_UNLIKELY(p_ret)) { \
146 "%s:%d starpu_pthread_rwlock_init: %s\n", \
147 __FILE__, __LINE__, strerror(p_ret)); \
152 #define STARPU_PTHREAD_RWLOCK_RDLOCK(rwlock) do { \
153 int p_ret = starpu_pthread_rwlock_rdlock(rwlock); \
154 if (STARPU_UNLIKELY(p_ret)) { \
156 "%s:%d starpu_pthread_rwlock_rdlock: %s\n", \
157 __FILE__, __LINE__, strerror(p_ret)); \
162 #define STARPU_PTHREAD_RWLOCK_TRYRDLOCK(rwlock) \
163 _starpu_pthread_rwlock_tryrdlock(rwlock, __FILE__, __LINE__)
165 int _starpu_pthread_rwlock_tryrdlock(starpu_pthread_rwlock_t *rwlock,
char *file,
int line)
167 int p_ret = starpu_pthread_rwlock_tryrdlock(rwlock);
170 "%s:%d starpu_pthread_rwlock_tryrdlock: %s\n",
171 file, line, strerror(p_ret));
177 #define STARPU_PTHREAD_RWLOCK_WRLOCK(rwlock) do { \
178 int p_ret = starpu_pthread_rwlock_wrlock(rwlock); \
179 if (STARPU_UNLIKELY(p_ret)) { \
181 "%s:%d starpu_pthread_rwlock_wrlock: %s\n", \
182 __FILE__, __LINE__, strerror(p_ret)); \
187 #define STARPU_PTHREAD_RWLOCK_TRYWRLOCK(rwlock) \
188 _starpu_pthread_rwlock_trywrlock(rwlock, __FILE__, __LINE__)
190 int _starpu_pthread_rwlock_trywrlock(starpu_pthread_rwlock_t *rwlock,
char *file,
int line)
192 int p_ret = starpu_pthread_rwlock_trywrlock(rwlock);
195 "%s:%d starpu_pthread_rwlock_trywrlock: %s\n",
196 file, line, strerror(p_ret));
202 #define STARPU_PTHREAD_RWLOCK_UNLOCK(rwlock) do { \
203 int p_ret = starpu_pthread_rwlock_unlock(rwlock); \
204 if (STARPU_UNLIKELY(p_ret)) { \
206 "%s:%d starpu_pthread_rwlock_unlock: %s\n", \
207 __FILE__, __LINE__, strerror(p_ret)); \
212 #define STARPU_PTHREAD_RWLOCK_DESTROY(rwlock) do { \
213 int p_ret = starpu_pthread_rwlock_destroy(rwlock); \
214 if (STARPU_UNLIKELY(p_ret)) { \
216 "%s:%d starpu_pthread_rwlock_destroy: %s\n", \
217 __FILE__, __LINE__, strerror(p_ret)); \
225 #define STARPU_PTHREAD_COND_INIT(cond, attr) do { \
226 int p_ret = starpu_pthread_cond_init((cond), (attr)); \
227 if (STARPU_UNLIKELY(p_ret)) { \
229 "%s:%d starpu_pthread_cond_init: %s\n", \
230 __FILE__, __LINE__, strerror(p_ret)); \
235 #define STARPU_PTHREAD_COND_DESTROY(cond) do { \
236 int p_ret = starpu_pthread_cond_destroy(cond); \
237 if (STARPU_UNLIKELY(p_ret)) { \
239 "%s:%d starpu_pthread_cond_destroy: %s\n", \
240 __FILE__, __LINE__, strerror(p_ret)); \
245 #define STARPU_PTHREAD_COND_SIGNAL(cond) do { \
246 int p_ret = starpu_pthread_cond_signal(cond); \
247 if (STARPU_UNLIKELY(p_ret)) { \
249 "%s:%d starpu_pthread_cond_signal: %s\n", \
250 __FILE__, __LINE__, strerror(p_ret)); \
255 #define STARPU_PTHREAD_COND_BROADCAST(cond) do { \
256 int p_ret = starpu_pthread_cond_broadcast(cond); \
257 if (STARPU_UNLIKELY(p_ret)) { \
259 "%s:%d starpu_pthread_cond_broadcast: %s\n", \
260 __FILE__, __LINE__, strerror(p_ret)); \
265 #define STARPU_PTHREAD_COND_WAIT(cond, mutex) do { \
266 int p_ret = starpu_pthread_cond_wait((cond), (mutex)); \
267 if (STARPU_UNLIKELY(p_ret)) { \
269 "%s:%d starpu_pthread_cond_wait: %s\n", \
270 __FILE__, __LINE__, strerror(p_ret)); \
279 #define STARPU_PTHREAD_BARRIER_INIT(barrier, attr, count) do { \
280 int p_ret = starpu_pthread_barrier_init((barrier), (attr), (count)); \
281 if (STARPU_UNLIKELY(p_ret)) { \
283 "%s:%d starpu_pthread_barrier_init: %s\n", \
284 __FILE__, __LINE__, strerror(p_ret)); \
289 #define STARPU_PTHREAD_BARRIER_DESTROY(barrier) do { \
290 int p_ret = starpu_pthread_barrier_destroy((barrier)); \
291 if (STARPU_UNLIKELY(p_ret)) { \
293 "%s:%d starpu_pthread_barrier_destroy: %s\n", \
294 __FILE__, __LINE__, strerror(p_ret)); \
299 #define STARPU_PTHREAD_BARRIER_WAIT(barrier) do { \
300 int p_ret = starpu_pthread_barrier_wait((barrier)); \
301 if (STARPU_UNLIKELY(!((p_ret == 0) || (p_ret == STARPU_PTHREAD_BARRIER_SERIAL_THREAD)))) { \
303 "%s:%d starpu_pthread_barrier_wait: %s\n", \
304 __FILE__, __LINE__, strerror(p_ret)); \
int starpu_pthread_mutex_trylock(starpu_pthread_mutex_t *mutex)