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