ReaderWriterLock.h 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #pragma once
  2. #include "utils/NonCopyable.h"
  3. namespace il2cpp
  4. {
  5. namespace os
  6. {
  7. class ReaderWriterLockImpl;
  8. class ReaderWriterLock
  9. {
  10. public:
  11. ReaderWriterLock();
  12. ~ReaderWriterLock();
  13. void LockExclusive();
  14. void LockShared();
  15. void ReleaseExclusive();
  16. void ReleaseShared();
  17. ReaderWriterLockImpl* GetImpl();
  18. private:
  19. ReaderWriterLockImpl* m_Impl;
  20. };
  21. struct ReaderWriterAutoLock : public il2cpp::utils::NonCopyable
  22. {
  23. ReaderWriterAutoLock(ReaderWriterLock* lock, bool exclusive = false)
  24. : m_Lock(lock), m_Exclusive(exclusive)
  25. {
  26. if (m_Exclusive)
  27. m_Lock->LockExclusive();
  28. else
  29. m_Lock->LockShared();
  30. }
  31. ~ReaderWriterAutoLock()
  32. {
  33. if (m_Exclusive)
  34. m_Lock->ReleaseExclusive();
  35. else
  36. m_Lock->ReleaseShared();
  37. }
  38. private:
  39. ReaderWriterLock* m_Lock;
  40. bool m_Exclusive;
  41. };
  42. }
  43. }