From cccccbf6cca94a3eaf813b4468453160e91c332b Mon Sep 17 00:00:00 2001 From: Joe Zhao Date: Mon, 14 Apr 2014 08:14:45 +0800 Subject: First commit --- src/TNetLib/Barrier.h | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/TNetLib/Barrier.h (limited to 'src/TNetLib/Barrier.h') diff --git a/src/TNetLib/Barrier.h b/src/TNetLib/Barrier.h new file mode 100644 index 0000000..a5849d2 --- /dev/null +++ b/src/TNetLib/Barrier.h @@ -0,0 +1,41 @@ +/* + * barrier.h + * + * This header file describes the "barrier" synchronization + * construct. The type barrier_t describes the full state of the + * barrier including the POSIX 1003.1c synchronization objects + * necessary. + * + * A barrier causes threads to wait until a set of threads has + * all "reached" the barrier. The number of threads required is + * set when the barrier is initialized, and cannot be changed + * except by reinitializing. + */ +#include + +#ifndef barrier_h +#define barrier_h + +namespace TNet { + +/* + * Structure describing a barrier. + */ +class Barrier { + public: + Barrier(int count=0); + ~Barrier(); + void SetThreshold(int thr); + int Wait(); + private: + pthread_mutex_t mutex_; /* Control access to barrier */ + pthread_cond_t cv_; /* wait for barrier */ + int threshold_; /* number of threads required */ + int counter_; /* current number of threads */ + int cycle_; /* alternate wait cycles (0 or 1) */ +}; + +}//namespace TNet + +#endif + -- cgit v1.2.3-70-g09d2