1 2 /* 3 * Licensed Materials - Property of IBM 4 * 5 * trousers - An open source TCG Software Stack 6 * 7 * (C) Copyright International Business Machines Corp. 2006 8 * 9 */ 10 11 #ifndef __THREADS_H__ 12 #define __THREADS_H__ 13 14 #ifdef HAVE_PTHREAD_H 15 16 #include <pthread.h> 17 18 /* mutex abstractions */ 19 #define MUTEX_INIT(m) pthread_mutex_init(&m, NULL) 20 #define MUTEX_LOCK(m) pthread_mutex_lock(&m) 21 #define MUTEX_UNLOCK(m) pthread_mutex_unlock(&m) 22 #define MUTEX_DECLARE(m) pthread_mutex_t m 23 #define MUTEX_DECLARE_INIT(m) pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER 24 #define MUTEX_DECLARE_EXTERN(m) extern pthread_mutex_t m 25 26 /* condition variable abstractions */ 27 #define COND_DECLARE(c) pthread_cond_t c 28 #define COND_INIT(c) pthread_cond_init(&c, NULL) 29 #define COND_VAR pthread_cond_t 30 #define COND_WAIT(c,m) pthread_cond_wait(c,m) 31 #define COND_SIGNAL(c) pthread_cond_signal(c) 32 33 /* thread abstractions */ 34 #define THREAD_ID ((THREAD_TYPE)pthread_self()) 35 #define THREAD_TYPE pthread_t 36 #define THREAD_JOIN pthread_join 37 #define THREAD_DETACH pthread_detach 38 #define THREAD_ATTR_DECLARE(a) pthread_attr_t a 39 #define THREAD_ATTR_INIT(a) pthread_attr_init(&a) 40 #define THREAD_ATTR_SETJOINABLE(a) pthread_attr_setdetachstate(&a, PTHREAD_CREATE_JOINABLE) 41 #define THREAD_EXIT pthread_exit 42 #define THREAD_CREATE(a,b,c,d) pthread_create(a,b,c,d) 43 #define THREAD_SET_SIGNAL_MASK pthread_sigmask 44 #define THREAD_NULL (THREAD_TYPE *)0 45 46 #else 47 48 #error No threading library defined! (Cannot find pthread.h) 49 50 #endif 51 52 #endif 53