hmutex.h 892 B

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