SharedMutex.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /**
  2. * SharedMutex.h C++11 ĂťÓĐstd::shared_mutex, ×ÔźşĘľĎÖŇť¸ö
  3. * zhangyl 20191108
  4. */
  5. #ifndef __SHARED_MUTEX_H__
  6. #define __SHARED_MUTEX_H__
  7. #ifdef WIN32
  8. #include <Windows.h>
  9. #else
  10. #include
  11. #include <pthread.h>
  12. #endif
  13. class SharedMutex final
  14. {
  15. public:
  16. SharedMutex();
  17. ~SharedMutex();
  18. void acquireReadLock();
  19. void acquireWriteLock();
  20. void unlockReadLock();
  21. void unlockWriteLock();
  22. private:
  23. SharedMutex(const SharedMutex& rhs) = delete;
  24. SharedMutex& operator =(const SharedMutex& rhs) = delete;
  25. private:
  26. #ifdef WIN32
  27. SRWLOCK m_SRWLock;
  28. #else
  29. pthread_rwlock_t m_SRWLock;
  30. #endif
  31. };
  32. class SharedLockGuard final
  33. {
  34. public:
  35. SharedLockGuard(SharedMutex& sharedMutex);
  36. ~SharedLockGuard();
  37. private:
  38. SharedLockGuard(const SharedLockGuard& rhs) = delete;
  39. SharedLockGuard operator=(const SharedLockGuard& rhs) = delete;
  40. private:
  41. SharedMutex& m_SharedMutex;
  42. };
  43. class UniqueLockGuard final
  44. {
  45. public:
  46. UniqueLockGuard(SharedMutex& sharedMutex);
  47. ~UniqueLockGuard();
  48. private:
  49. UniqueLockGuard(const UniqueLockGuard& rhs) = delete;
  50. UniqueLockGuard operator=(const UniqueLockGuard& rhs) = delete;
  51. private:
  52. SharedMutex& m_SharedMutex;
  53. };
  54. #endif //!__SHARED_MUTEX_H__