int pthread_rwlock_init(pthread_rwlock_t *ptr, const pthread_rwlockattr_t *attr) { if (__predict_false(__uselibcstub)) return __libc_rwlock_init_stub(ptr, attr); if (attr && (attr->ptra_magic != _PT_RWLOCKATTR_MAGIC)) return EINVAL; ptr->ptr_magic = _PT_RWLOCK_MAGIC; PTQ_INIT(&ptr->ptr_rblocked); PTQ_INIT(&ptr->ptr_wblocked); ptr->ptr_nreaders = 0; ptr->ptr_owner = NULL; return 0; }
int pthread_barrier_init(pthread_barrier_t *barrier, const pthread_barrierattr_t *attr, unsigned int count) { if (attr != NULL && attr->ptba_magic != _PT_BARRIERATTR_MAGIC) return EINVAL; if (count == 0) return EINVAL; barrier->ptb_magic = _PT_BARRIER_MAGIC; PTQ_INIT(&barrier->ptb_waiters); barrier->ptb_initcount = count; barrier->ptb_curcount = 0; barrier->ptb_generation = 0; return 0; }