diff options
Diffstat (limited to 'libthreads/rwlock.h')
-rw-r--r-- | libthreads/rwlock.h | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/libthreads/rwlock.h b/libthreads/rwlock.h index 7abbfff1..44d9a35d 100644 --- a/libthreads/rwlock.h +++ b/libthreads/rwlock.h @@ -21,6 +21,13 @@ #include <cthreads.h> #include <assert.h> +#include <features.h> + +#ifdef RWLOCK_DEFINE_EI +#define RWLOCK_EI +#else +#define RWLOCK_EI __extern_inline +#endif struct rwlock { @@ -31,17 +38,20 @@ struct rwlock int readers_waiting; }; -#ifdef _RWLOCK_DEFINE_FUNCTIONS -#undef _EXTERN_INLINE -#define _EXTERN_INLINE -#else /* ! _RWLOCK_DEFINE_FUNCTIONS */ -#ifndef _EXTERN_INLINE -#define _EXTERN_INLINE extern __inline -#endif -#endif /* _RWLOCK_DEFINE_FUNCTIONS */ +extern void rwlock_reader_lock (struct rwlock *lock); + +extern void rwlock_writer_lock (struct rwlock *lock); + +extern void rwlock_reader_unlock (struct rwlock *lock); + +extern void rwlock_writer_unlock (struct rwlock *lock); + +extern void rwlock_init (struct rwlock *lock); + +#if defined(__USE_EXTERN_INLINES) || defined(RWLOCK_DEFINE_EI) /* Get a reader lock on reader-writer lock LOCK for disknode DN */ -_EXTERN_INLINE void +RWLOCK_EI void rwlock_reader_lock (struct rwlock *lock) { mutex_lock (&lock->master); @@ -58,7 +68,7 @@ rwlock_reader_lock (struct rwlock *lock) } /* Get a writer lock on reader-writer lock LOCK for disknode DN */ -_EXTERN_INLINE void +RWLOCK_EI void rwlock_writer_lock (struct rwlock *lock) { mutex_lock (&lock->master); @@ -75,7 +85,7 @@ rwlock_writer_lock (struct rwlock *lock) } /* Release a reader lock on reader-writer lock LOCK for disknode DN */ -_EXTERN_INLINE void +RWLOCK_EI void rwlock_reader_unlock (struct rwlock *lock) { mutex_lock (&lock->master); @@ -87,7 +97,7 @@ rwlock_reader_unlock (struct rwlock *lock) } /* Release a writer lock on reader-writer lock LOCK for disknode DN */ -_EXTERN_INLINE void +RWLOCK_EI void rwlock_writer_unlock (struct rwlock *lock) { mutex_lock (&lock->master); @@ -99,7 +109,7 @@ rwlock_writer_unlock (struct rwlock *lock) } /* Initialize reader-writer lock LOCK */ -_EXTERN_INLINE void +RWLOCK_EI void rwlock_init (struct rwlock *lock) { mutex_init (&lock->master); @@ -109,6 +119,8 @@ rwlock_init (struct rwlock *lock) lock->writers_waiting = 0; } +#endif /* Use extern inlines. */ + #define RWLOCK_INITIALIZER \ { MUTEX_INITIALIZER, CONDITION_INITIALIZER, 0, 0, 0 } |