barrier.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #if !defined(_ERGO_BARRIER_H_)
00029 #define _ERGO_BARRIER_H_
00030
00034 #if !defined(HAS_PTHREAD_BARRIER)
00035
00036 #ifdef __cplusplus
00037 #define EXTERN_C extern "C"
00038 #else
00039 #define EXTERN_C extern
00040 #endif
00041
00042 #if !defined(PTHREAD_BARRIER_SERIAL_THREAD)
00043 #define PTHREAD_BARRIER_SERIAL_THREAD -1
00044 #endif
00045
00046 typedef struct ergo_barrier {
00047 pthread_mutex_t barrierMutex;
00048 pthread_cond_t conditionVar;
00049 int initCount;
00050 int currCount;
00051 int cycle;
00052 } ergo_barrier_t;
00053
00054 EXTERN_C int ergo_barrier_init(ergo_barrier_t *__restrict barrier,
00055 const void * attr_ignored,
00056 unsigned int count);
00057
00058 EXTERN_C int ergo_barrier_destroy (ergo_barrier_t *__barrier);
00059 EXTERN_C int ergo_barrier_wait (ergo_barrier_t *__barrier);
00060
00061 #else
00062 #define ergo_barrier_t pthread_barrier_t
00063 #define ergo_barrier_init pthread_barrier_init
00064 #define ergo_barrier_destroy pthread_barrier_destroy
00065 #define ergo_barrier_wait pthread_barrier_wait
00066 #endif
00067
00068 #endif