Lines Matching refs:barrier
386 int uv_barrier_init(uv_barrier_t* barrier, unsigned int count) {
389 barrier->n = count;
390 barrier->count = 0;
392 err = uv_mutex_init(&barrier->mutex);
396 err = uv_sem_init(&barrier->turnstile1, 0);
400 err = uv_sem_init(&barrier->turnstile2, 1);
407 uv_sem_destroy(&barrier->turnstile1);
409 uv_mutex_destroy(&barrier->mutex);
415 void uv_barrier_destroy(uv_barrier_t* barrier) {
416 uv_sem_destroy(&barrier->turnstile2);
417 uv_sem_destroy(&barrier->turnstile1);
418 uv_mutex_destroy(&barrier->mutex);
422 int uv_barrier_wait(uv_barrier_t* barrier) {
425 uv_mutex_lock(&barrier->mutex);
426 if (++barrier->count == barrier->n) {
427 uv_sem_wait(&barrier->turnstile2);
428 uv_sem_post(&barrier->turnstile1);
430 uv_mutex_unlock(&barrier->mutex);
432 uv_sem_wait(&barrier->turnstile1);
433 uv_sem_post(&barrier->turnstile1);
435 uv_mutex_lock(&barrier->mutex);
436 serial_thread = (--barrier->count == 0);
438 uv_sem_wait(&barrier->turnstile1);
439 uv_sem_post(&barrier->turnstile2);
441 uv_mutex_unlock(&barrier->mutex);
443 uv_sem_wait(&barrier->turnstile2);
444 uv_sem_post(&barrier->turnstile2);