rwlock.h 676 B

12345678910111213141516171819202122232425262728293031
  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_FLAG read_lock;
  12. ATOMIC_FLAG read_entry_lock;
  13. ATOMIC_FLAG write_lock;
  14. } RWLock;
  15. #define RWLOCK_STATIC_INITIALIZE { ATOMIC_INIT_STATIC(0), ATOMIC_INIT_STATIC(0), \
  16. ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT }
  17. void RWLockInit(RWLock *lock);
  18. void ReadLock(RWLock *lock);
  19. void ReadUnlock(RWLock *lock);
  20. void WriteLock(RWLock *lock);
  21. void WriteUnlock(RWLock *lock);
  22. #ifdef __cplusplus
  23. }
  24. #endif
  25. #endif /* AL_RWLOCK_H */