blob: 94eb727a74e00e3990d67eb8a716b476885e8e42 [file] [log] [blame]
#ifndef COUNTER_BARRIER_HDR
#define COUNTER_BARRIER_HDR
#include <pthread.h>
struct waitable_counter;
typedef struct counter_barrier
{
pthread_cond_t cond;
struct waitable_counter *count;
volatile struct counter_barrier *next;
volatile int wait_count;
volatile int curr_wait_group;
} counter_barrier;
typedef struct waitable_counter
{
pthread_mutex_t m;
volatile counter_barrier *b;
volatile int val;
} waitable_counter;
void waitable_counter_init (waitable_counter *c, int val);
internal_proto(waitable_counter_init);
int waitable_counter_add (waitable_counter *c, int val);
internal_proto(waitable_counter_add);
int waitable_counter_get_val (waitable_counter *c);
internal_proto(waitable_counter_get_val);
void bind_counter_barrier (counter_barrier *b, waitable_counter *c);
internal_proto(bind_counter_barrier);
void counter_barrier_wait (counter_barrier *b);
internal_proto(counter_barrier_wait);
#endif