ReaderWriterLock.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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 ReaderWriterAutoSharedLock : public il2cpp::utils::NonCopyable
  22. {
  23. ReaderWriterAutoSharedLock(ReaderWriterLock* lock)
  24. : m_Lock(lock)
  25. {
  26. #if !IL2CPP_SLIM_CLASS
  27. m_Lock->LockShared();
  28. #endif
  29. }
  30. #if !IL2CPP_SLIM_CLASS
  31. ~ReaderWriterAutoSharedLock()
  32. {
  33. m_Lock->ReleaseShared();
  34. }
  35. #endif
  36. private:
  37. ReaderWriterLock* m_Lock;
  38. };
  39. struct ReaderWriterAutoExclusiveLock : public il2cpp::utils::NonCopyable
  40. {
  41. ReaderWriterAutoExclusiveLock(ReaderWriterLock* lock)
  42. : m_Lock(lock)
  43. {
  44. #if !IL2CPP_SLIM_CLASS
  45. m_Lock->LockExclusive();
  46. #endif
  47. }
  48. #if !IL2CPP_SLIM_CLASS
  49. ~ReaderWriterAutoExclusiveLock()
  50. {
  51. m_Lock->ReleaseExclusive();
  52. }
  53. #endif
  54. private:
  55. ReaderWriterLock* m_Lock;
  56. };
  57. }
  58. }