-
Notifications
You must be signed in to change notification settings - Fork 63
/
barrier.h
42 lines (38 loc) · 1.32 KB
/
barrier.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/*
* 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 <pthread.h>
/*
* Structure describing a barrier.
*/
typedef struct barrier_tag {
pthread_mutex_t mutex; /* Control access to barrier */
pthread_cond_t cv; /* wait for barrier */
int valid; /* set when valid */
int threshold; /* number of threads required */
int counter; /* current number of threads */
unsigned long cycle; /* count cycles */
} barrier_t;
#define BARRIER_VALID 0xdbcafe
/*
* Support static initialization of barriers
*/
#define BARRIER_INITIALIZER(cnt) \
{PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, \
BARRIER_VALID, cnt, cnt, 0}
/*
* Define barrier functions
*/
extern int barrier_init (barrier_t *barrier, int count);
extern int barrier_destroy (barrier_t *barrier);
extern int barrier_wait (barrier_t *barrier);