0001
0002 #include "util.h"
0003 #include "rwsem.h"
0004
0005 int init_rwsem(struct rw_semaphore *sem)
0006 {
0007 return pthread_rwlock_init(&sem->lock, NULL);
0008 }
0009
0010 int exit_rwsem(struct rw_semaphore *sem)
0011 {
0012 return pthread_rwlock_destroy(&sem->lock);
0013 }
0014
0015 int down_read(struct rw_semaphore *sem)
0016 {
0017 return perf_singlethreaded ? 0 : pthread_rwlock_rdlock(&sem->lock);
0018 }
0019
0020 int up_read(struct rw_semaphore *sem)
0021 {
0022 return perf_singlethreaded ? 0 : pthread_rwlock_unlock(&sem->lock);
0023 }
0024
0025 int down_write(struct rw_semaphore *sem)
0026 {
0027 return perf_singlethreaded ? 0 : pthread_rwlock_wrlock(&sem->lock);
0028 }
0029
0030 int up_write(struct rw_semaphore *sem)
0031 {
0032 return perf_singlethreaded ? 0 : pthread_rwlock_unlock(&sem->lock);
0033 }