1 #ifndef _PERF_RWSEM_H 2 #define _PERF_RWSEM_H 3 4 #include <pthread.h> 5 #include "mutex.h" 6 7 /* 8 * Mutexes have additional error checking. Enable to use a mutex rather than a 9 * rwlock for debugging. 10 */ 11 #define RWS_ERRORCHECK 0 12 13 struct rw_semaphore { 14 #if RWS_ERRORCHECK 15 struct mutex mtx; 16 #else 17 pthread_rwlock_t lock; 18 #endif 19 }; 20 21 int init_rwsem(struct rw_semaphore *sem); 22 int exit_rwsem(struct rw_semaphore *sem); 23 24 int down_read(struct rw_semaphore *sem); 25 int up_read(struct rw_semaphore *sem); 26 27 int down_write(struct rw_semaphore *sem); 28 int up_write(struct rw_semaphore *sem); 29 30 #endif /* _PERF_RWSEM_H */ 31