selock.h 632 B

123456789101112131415161718192021222324252627282930
  1. #ifndef SELOCK_H
  2. #define SELOCK_H
  3. #include "lock.h"
  4. /* Shared/Exclusive (Reader/Writer) lock implementation */
  5. class SELock
  6. {
  7. public:
  8. SELock(void);
  9. void acquire_exclusive(void);
  10. void release_exclusive(void);
  11. void acquire_shared(void);
  12. void release_shared(void);
  13. void upgrade(void);
  14. void downgrade(void);
  15. private:
  16. Lock m_lock;
  17. bool m_write; // Currently locked for writing
  18. UInt64 m_writers; // Number of waiting writers
  19. UInt64 m_readers; // Number of current readers
  20. #ifdef TIME_LOCKS
  21. TotalTimer* _timer;
  22. #endif
  23. };
  24. #endif // SELOCK_H