暫無描述
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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 AllocateStaticData();
  12. static void FreeStaticData();
  13. static void Enter(Il2CppObject* object);
  14. static bool TryEnter(Il2CppObject* object, uint32_t timeout);
  15. static void Exit(Il2CppObject* object);
  16. static void Pulse(Il2CppObject* object);
  17. static void PulseAll(Il2CppObject* object);
  18. static void Wait(Il2CppObject* object);
  19. static bool TryWait(Il2CppObject* object, uint32_t timeout);
  20. static bool IsAcquired(Il2CppObject* object);
  21. static bool IsOwnedByCurrentThread(Il2CppObject* object);
  22. };
  23. #if !IL2CPP_SUPPORT_THREADS
  24. inline void Monitor::AllocateStaticData()
  25. {
  26. }
  27. inline void Monitor::FreeStaticData()
  28. {
  29. }
  30. inline void Monitor::Enter(Il2CppObject* object)
  31. {
  32. }
  33. inline bool Monitor::TryEnter(Il2CppObject* object, uint32_t timeout)
  34. {
  35. return true;
  36. }
  37. inline void Monitor::Exit(Il2CppObject* object)
  38. {
  39. }
  40. inline void Monitor::Pulse(Il2CppObject* object)
  41. {
  42. }
  43. inline void Monitor::PulseAll(Il2CppObject* object)
  44. {
  45. }
  46. inline void Monitor::Wait(Il2CppObject* object)
  47. {
  48. }
  49. inline bool Monitor::TryWait(Il2CppObject* object, uint32_t timeout)
  50. {
  51. return true;
  52. }
  53. inline bool Monitor::IsAcquired(Il2CppObject* object)
  54. {
  55. return true;
  56. }
  57. inline bool Monitor::IsOwnedByCurrentThread(Il2CppObject* object)
  58. {
  59. return true;
  60. }
  61. #endif
  62. struct MonitorHolder
  63. {
  64. MonitorHolder(Il2CppObject* obj) :
  65. m_Object(obj)
  66. {
  67. Monitor::Enter(obj);
  68. }
  69. ~MonitorHolder()
  70. {
  71. Monitor::Exit(m_Object);
  72. }
  73. private:
  74. Il2CppObject* m_Object;
  75. };
  76. } /* namespace vm */
  77. } /* namespace il2cpp */