hmutex.h 934 B

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