FastReaderReaderWriterLock.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #pragma once
  2. #include "utils/NonCopyable.h"
  3. namespace il2cpp
  4. {
  5. namespace os
  6. {
  7. class FastReaderReaderWriterLockImpl;
  8. // Use this class if the work done in the shared lock is "fast" - on the order of taking a lock
  9. class FastReaderReaderWriterLock
  10. {
  11. public:
  12. FastReaderReaderWriterLock();
  13. ~FastReaderReaderWriterLock();
  14. void LockExclusive();
  15. void LockShared();
  16. void ReleaseExclusive();
  17. void ReleaseShared();
  18. FastReaderReaderWriterLockImpl* GetImpl();
  19. private:
  20. FastReaderReaderWriterLockImpl* m_Impl;
  21. };
  22. struct FastReaderReaderWriterAutoSharedLock : public il2cpp::utils::NonCopyable
  23. {
  24. FastReaderReaderWriterAutoSharedLock(FastReaderReaderWriterLock* lock)
  25. : m_Lock(lock)
  26. {
  27. #if !IL2CPP_SLIM_CLASS
  28. m_Lock->LockShared();
  29. #endif
  30. }
  31. #if !IL2CPP_SLIM_CLASS
  32. ~FastReaderReaderWriterAutoSharedLock()
  33. {
  34. m_Lock->ReleaseShared();
  35. }
  36. #endif
  37. private:
  38. FastReaderReaderWriterLock* m_Lock;
  39. };
  40. struct FastReaderReaderWriterAutoExclusiveLock : public il2cpp::utils::NonCopyable
  41. {
  42. FastReaderReaderWriterAutoExclusiveLock(FastReaderReaderWriterLock* lock)
  43. : m_Lock(lock)
  44. {
  45. #if !IL2CPP_SLIM_CLASS
  46. m_Lock->LockExclusive();
  47. #endif
  48. }
  49. #if !IL2CPP_SLIM_CLASS
  50. ~FastReaderReaderWriterAutoExclusiveLock()
  51. {
  52. m_Lock->ReleaseExclusive();
  53. }
  54. #endif
  55. private:
  56. FastReaderReaderWriterLock* m_Lock;
  57. };
  58. }
  59. }