/* * Licensed Materials - Property of IBM * * trousers - An open source TCG Software Stack * * (C) Copyright International Business Machines Corp. 2006 * */ #ifndef __THREADS_H__ #define __THREADS_H__ #ifdef HAVE_PTHREAD_H #include /* mutex abstractions */ #define MUTEX_INIT(m) pthread_mutex_init(&m, NULL) #define MUTEX_LOCK(m) pthread_mutex_lock(&m) #define MUTEX_UNLOCK(m) pthread_mutex_unlock(&m) #define MUTEX_DECLARE(m) pthread_mutex_t m #define MUTEX_DECLARE_INIT(m) pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER #define MUTEX_DECLARE_EXTERN(m) extern pthread_mutex_t m /* condition variable abstractions */ #define COND_DECLARE(c) pthread_cond_t c #define COND_INIT(c) pthread_cond_init(&c, NULL) #define COND_VAR pthread_cond_t #define COND_WAIT(c,m) pthread_cond_wait(c,m) #define COND_SIGNAL(c) pthread_cond_signal(c) /* thread abstractions */ #define THREAD_ID ((THREAD_TYPE)pthread_self()) #define THREAD_TYPE pthread_t #define THREAD_JOIN pthread_join #define THREAD_DETACH pthread_detach #define THREAD_ATTR_DECLARE(a) pthread_attr_t a #define THREAD_ATTR_INIT(a) pthread_attr_init(&a) #define THREAD_ATTR_SETJOINABLE(a) pthread_attr_setdetachstate(&a, PTHREAD_CREATE_JOINABLE) #define THREAD_EXIT pthread_exit #define THREAD_CREATE(a,b,c,d) pthread_create(a,b,c,d) #define THREAD_SET_SIGNAL_MASK pthread_sigmask #define THREAD_NULL (THREAD_TYPE *)0 #else #error No threading library defined! (Cannot find pthread.h) #endif #endif