Lines Matching refs:barrier
175 static inline void pipe_barrier_init(pipe_barrier *barrier, unsigned count) in pipe_barrier_init() argument
177 pthread_barrier_init(barrier, NULL, count); in pipe_barrier_init()
180 static inline void pipe_barrier_destroy(pipe_barrier *barrier) in pipe_barrier_destroy() argument
182 pthread_barrier_destroy(barrier); in pipe_barrier_destroy()
185 static inline void pipe_barrier_wait(pipe_barrier *barrier) in pipe_barrier_wait() argument
187 pthread_barrier_wait(barrier); in pipe_barrier_wait()
201 static inline void pipe_barrier_init(pipe_barrier *barrier, unsigned count) in pipe_barrier_init() argument
203 barrier->count = count; in pipe_barrier_init()
204 barrier->waiters = 0; in pipe_barrier_init()
205 barrier->sequence = 0; in pipe_barrier_init()
206 pipe_mutex_init(barrier->mutex); in pipe_barrier_init()
207 pipe_condvar_init(barrier->condvar); in pipe_barrier_init()
210 static inline void pipe_barrier_destroy(pipe_barrier *barrier) in pipe_barrier_destroy() argument
212 assert(barrier->waiters == 0); in pipe_barrier_destroy()
213 pipe_mutex_destroy(barrier->mutex); in pipe_barrier_destroy()
214 pipe_condvar_destroy(barrier->condvar); in pipe_barrier_destroy()
217 static inline void pipe_barrier_wait(pipe_barrier *barrier) in pipe_barrier_wait() argument
219 pipe_mutex_lock(barrier->mutex); in pipe_barrier_wait()
221 assert(barrier->waiters < barrier->count); in pipe_barrier_wait()
222 barrier->waiters++; in pipe_barrier_wait()
224 if (barrier->waiters < barrier->count) { in pipe_barrier_wait()
225 uint64_t sequence = barrier->sequence; in pipe_barrier_wait()
228 pipe_condvar_wait(barrier->condvar, barrier->mutex); in pipe_barrier_wait()
229 } while (sequence == barrier->sequence); in pipe_barrier_wait()
231 barrier->waiters = 0; in pipe_barrier_wait()
232 barrier->sequence++; in pipe_barrier_wait()
233 pipe_condvar_broadcast(barrier->condvar); in pipe_barrier_wait()
236 pipe_mutex_unlock(barrier->mutex); in pipe_barrier_wait()