threading_RLock.c 1.2 KB

12345678910111213141516171819202122232425262728293031323334
  1. #include "threading_Lock.h"
  2. #include "PikaPlatformEx.h"
  3. void threading_RLock___del__(PikaObj* self) {
  4. pika_platform_thread_rtmutex_t* rm = obj_getPtr(self, "_rmutex_");
  5. pika_platform_thread_rtmutex_destroy(rm);
  6. pikaFree(rm, sizeof(pika_platform_thread_rtmutex_t));
  7. }
  8. void threading_RLock___init__(PikaObj* self) {
  9. pika_platform_thread_rtmutex_t* rm =
  10. pikaMalloc(sizeof(pika_platform_thread_rtmutex_t));
  11. pika_platform_thread_rtmutex_init(rm);
  12. obj_setPtr(self, "_rmutex_", rm);
  13. }
  14. pika_bool threading_RLock_acquire(PikaObj* self,
  15. pika_bool block,
  16. Arg* timeout) {
  17. pika_platform_thread_rtmutex_t* rm = obj_getPtr(self, "_rmutex_");
  18. int result = pika_platform_thread_rtmutex_lock(rm, block, timeout);
  19. return result == 0 ? pika_true : pika_false;
  20. }
  21. pika_bool threading_RLock_locked(PikaObj* self) {
  22. pika_platform_thread_rtmutex_t* rm = obj_getPtr(self, "_rmutex_");
  23. int result = pika_platform_thread_rtmutex_locked(rm);
  24. return result != 0 ? pika_true : pika_false;
  25. }
  26. void threading_RLock_release(PikaObj* self) {
  27. pika_platform_thread_rtmutex_t* rm = obj_getPtr(self, "_rmutex_");
  28. pika_platform_thread_rtmutex_unlock(rm);
  29. }