rwlock.h 740 B

1234567891011121314151617181920212223242526272829303132
  1. #ifndef AL_RWLOCK_H
  2. #define AL_RWLOCK_H
  3. #include "bool.h"
  4. #include "atomic.h"
  5. #ifdef __cplusplus
  6. extern "C" {
  7. #endif
  8. typedef struct {
  9. RefCount read_count;
  10. RefCount write_count;
  11. ATOMIC(int) read_lock;
  12. ATOMIC(int) read_entry_lock;
  13. ATOMIC(int) write_lock;
  14. } RWLock;
  15. #define RWLOCK_STATIC_INITIALIZE { ATOMIC_INIT_STATIC(0), ATOMIC_INIT_STATIC(0), \
  16. ATOMIC_INIT_STATIC(false), ATOMIC_INIT_STATIC(false), \
  17. ATOMIC_INIT_STATIC(false) }
  18. void RWLockInit(RWLock *lock);
  19. void ReadLock(RWLock *lock);
  20. void ReadUnlock(RWLock *lock);
  21. void WriteLock(RWLock *lock);
  22. void WriteUnlock(RWLock *lock);
  23. #ifdef __cplusplus
  24. }
  25. #endif
  26. #endif /* AL_RWLOCK_H */