hmutex.h 937 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  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. };
  22. #else
  23. class RWLock{
  24. public:
  25. RWLock() { pthread_rwlock_init(&_rwlock, NULL); }
  26. ~RWLock() { pthread_rwlock_destroy(&_rwlock); }
  27. void rdlock() { pthread_rwlock_rdlock(&_rwlock); }
  28. void rdunlock() { pthread_rwlock_unlock(&_rwlock); }
  29. void wrlock() { pthread_rwlock_wrlock(&_rwlock); }
  30. void wrunlock() { pthread_rwlock_unlock(&_rwlock); }
  31. private:
  32. pthread_rwlock_t _rwlock;
  33. };
  34. #endif
  35. #endif // H_MUTEX_H