Barriers pseudocode
===================

    int pthread_barrier_wait(barrier_t *barrier);

struct barrier_t {

   unsigned int lock:
         - internal mutex

   unsigned int left;
         - current barrier count, # of threads still needed.

   unsigned int init_count;
         - number of threads needed for the barrier to continue.

   unsigned int curr_event;
         - generation count
}

pthread_barrier_wait(barrier_t *barrier)
{
  unsigned int event;
  result = 0;

  lll_lock(barrier->lock);
  if (!--barrier->left) {
    barrier->curr_event++;
    futex_wake(&barrier->curr_event, INT_MAX)

    result = BARRIER_SERIAL_THREAD;
  } else {
    event = barrier->curr_event;
    lll_unlock(barrier->lock);
    do {
      futex_wait(&barrier->curr_event, event)
    } while (event == barrier->curr_event);
  }

  if (atomic_increment_val (barrier->left) == barrier->init_count)
    lll_unlock(barrier->lock);

  return result;
}
