| #ifndef _PERF_RWSEM_H | |
| #define _PERF_RWSEM_H | |
| #include <pthread.h> | |
| #include "mutex.h" | |
| /* | |
| * Mutexes have additional error checking. Enable to use a mutex rather than a | |
| * rwlock for debugging. | |
| */ | |
| #define RWS_ERRORCHECK 0 | |
| struct LOCKABLE rw_semaphore { | |
| #if RWS_ERRORCHECK | |
| struct mutex mtx; | |
| #else | |
| pthread_rwlock_t lock; | |
| #endif | |
| }; | |
| int init_rwsem(struct rw_semaphore *sem); | |
| int exit_rwsem(struct rw_semaphore *sem); | |
| int down_read(struct rw_semaphore *sem) SHARED_LOCK_FUNCTION(sem); | |
| int up_read(struct rw_semaphore *sem) UNLOCK_FUNCTION(sem); | |
| int down_write(struct rw_semaphore *sem) EXCLUSIVE_LOCK_FUNCTION(sem); | |
| int up_write(struct rw_semaphore *sem) UNLOCK_FUNCTION(sem); | |
| #endif /* _PERF_RWSEM_H */ |