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
13struct rw_semaphore {
14#if RWS_ERRORCHECK
15	struct mutex mtx;
16#else
17	pthread_rwlock_t lock;
18#endif
19};
20
21int init_rwsem(struct rw_semaphore *sem);
22int exit_rwsem(struct rw_semaphore *sem);
23
24int down_read(struct rw_semaphore *sem);
25int up_read(struct rw_semaphore *sem);
26
27int down_write(struct rw_semaphore *sem);
28int up_write(struct rw_semaphore *sem);
29
30#endif /* _PERF_RWSEM_H */
31