Monitor.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #pragma once
  2. #include "il2cpp-config.h"
  3. struct Il2CppObject;
  4. namespace il2cpp
  5. {
  6. namespace vm
  7. {
  8. class LIBIL2CPP_CODEGEN_API Monitor
  9. {
  10. public:
  11. static void Enter(Il2CppObject* object);
  12. static bool TryEnter(Il2CppObject* object, uint32_t timeout);
  13. static void Exit(Il2CppObject* object);
  14. static void Pulse(Il2CppObject* object);
  15. static void PulseAll(Il2CppObject* object);
  16. static void Wait(Il2CppObject* object);
  17. static bool TryWait(Il2CppObject* object, uint32_t timeout);
  18. static bool IsAcquired(Il2CppObject* object);
  19. };
  20. #if !IL2CPP_SUPPORT_THREADS
  21. inline void Monitor::Enter(Il2CppObject* object)
  22. {
  23. }
  24. inline bool Monitor::TryEnter(Il2CppObject* object, uint32_t timeout)
  25. {
  26. return true;
  27. }
  28. inline void Monitor::Exit(Il2CppObject* object)
  29. {
  30. }
  31. inline void Monitor::Pulse(Il2CppObject* object)
  32. {
  33. }
  34. inline void Monitor::PulseAll(Il2CppObject* object)
  35. {
  36. }
  37. inline void Monitor::Wait(Il2CppObject* object)
  38. {
  39. }
  40. inline bool Monitor::TryWait(Il2CppObject* object, uint32_t timeout)
  41. {
  42. return true;
  43. }
  44. inline bool Monitor::IsAcquired(Il2CppObject* object)
  45. {
  46. return true;
  47. }
  48. #endif
  49. struct MonitorHolder
  50. {
  51. MonitorHolder(Il2CppObject* obj) :
  52. m_Object(obj)
  53. {
  54. Monitor::Enter(obj);
  55. }
  56. ~MonitorHolder()
  57. {
  58. Monitor::Exit(m_Object);
  59. }
  60. private:
  61. Il2CppObject* m_Object;
  62. };
  63. } /* namespace vm */
  64. } /* namespace il2cpp */