hmutex.h 862 B

123456789101112131415161718192021222324252627282930313233343536
  1. #ifndef H_MUTEX_H
  2. #define H_MUTEX_H
  3. #include "hplatform.h"
  4. #ifdef _MSC_VER
  5. class RWLock{
  6. public:
  7. RWLock() { InitializeSRWLock(&_rwlock); }
  8. ~RWLock() { }
  9. void rdlock() { AcquireSRWLockShared(&_rwlock); }
  10. void rdunlock() { ReleaseSRWLockShared(&_rwlock); }
  11. void wrlock() { AcquireSRWLockExclusive(&_rwlock); }
  12. void wrunlock() { ReleaseSRWLockExclusive(&_rwlock); }
  13. private:
  14. SRWLOCK _rwlock;
  15. };
  16. #else
  17. class RWLock{
  18. public:
  19. RWLock() { pthread_rwlock_init(&_rwlock, NULL); }
  20. ~RWLock() { pthread_rwlock_destroy(&_rwlock); }
  21. void rdlock() { pthread_rwlock_rdlock(&_rwlock); }
  22. void rdunlock() { pthread_rwlock_unlock(&_rwlock); }
  23. void wrlock() { pthread_rwlock_wrlock(&_rwlock); }
  24. void wrunlock() { pthread_rwlock_unlock(&_rwlock); }
  25. private:
  26. pthread_rwlock_t _rwlock;
  27. };
  28. #endif
  29. #endif // H_MUTEX_H