Lines Matching defs:barrier
44 pthread_barrier_init(pthread_barrier_t *barrier,
48 pthread__error(EINVAL, "Invalid barrier attribute",
53 barrier->ptb_magic = _PT_BARRIER_MAGIC;
54 PTQ_INIT(&barrier->ptb_waiters);
55 barrier->ptb_initcount = count;
56 barrier->ptb_curcount = 0;
57 barrier->ptb_generation = 0;
62 pthread_barrier_destroy(pthread_barrier_t *barrier)
65 pthread__error(EINVAL, "Invalid barrier",
66 barrier->ptb_magic == _PT_BARRIER_MAGIC);
67 if (barrier->ptb_curcount != 0)
70 barrier->ptb_magic = _PT_BARRIER_DEAD;
76 pthread_barrier_wait(pthread_barrier_t *barrier)
82 pthread__error(EINVAL, "Invalid barrier",
83 barrier->ptb_magic == _PT_BARRIER_MAGIC);
90 * simply elect that the thread that causes the barrier
96 interlock = pthread__hashlock(barrier);
98 if (barrier->ptb_curcount + 1 == barrier->ptb_initcount) {
99 barrier->ptb_generation++;
100 barrier->ptb_curcount = 0;
101 pthread__unpark_all(&barrier->ptb_waiters, self,
106 barrier->ptb_curcount++;
107 gen = barrier->ptb_generation;
109 PTQ_INSERT_TAIL(&barrier->ptb_waiters, self, pt_sleep);
110 self->pt_sleepobj = &barrier->ptb_waiters;
111 (void)pthread__park(self, interlock, &barrier->ptb_waiters,
113 if (__predict_true(gen != barrier->ptb_generation)) {
117 if (gen != barrier->ptb_generation) {
132 pthread__error(EINVAL, "Invalid barrier attribute",
143 pthread__error(EINVAL, "Invalid barrier attribute",
168 pthread__error(EINVAL, "Invalid barrier attribute",