PikaPlatformEx.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #ifndef ___PikaPlatformEx__H
  2. #define ___PikaPlatformEx__H
  3. #include "PikaPlatform.h"
  4. #include "PikaObj.h"
  5. #include <time.h>
  6. #include <pthread.h>
  7. #include <errno.h>
  8. int pika_platform_thread_mutex_timedlock(pika_platform_thread_mutex_t* m,
  9. pika_bool block,
  10. Arg* timeout);
  11. //-------------------------------
  12. // 递归带超时互斥锁结构体
  13. typedef struct {
  14. pthread_mutex_t mutex;
  15. pthread_cond_t cond;
  16. pthread_t owner; // 当前持有锁的线程 ID
  17. int count; // 递归深度
  18. } pika_platform_thread_rtmutex_t;
  19. // 初始化递归互斥锁
  20. void pika_platform_thread_rtmutex_init(pika_platform_thread_rtmutex_t* rtm);
  21. // 销毁递归互斥锁
  22. void pika_platform_thread_rtmutex_destroy(pika_platform_thread_rtmutex_t* rtm);
  23. // 带超时的递归互斥锁加锁
  24. int pika_platform_thread_rtmutex_lock(pika_platform_thread_rtmutex_t* rtm,
  25. pika_bool block,
  26. Arg* timeout);
  27. // 递归互斥锁解锁
  28. int pika_platform_thread_rtmutex_unlock(pika_platform_thread_rtmutex_t* rtm);
  29. // 是否已获得锁
  30. int pika_platform_thread_rtmutex_locked(pika_platform_thread_rtmutex_t* rtm);
  31. //-------------------------------------
  32. typedef struct {
  33. pika_platform_thread_rtmutex_t rtmutex;
  34. pthread_cond_t cond;
  35. pthread_t owner; // 当前持有锁的线程 ID
  36. } pika_platform_thread_cond_t;
  37. void pika_platform_thread_cond_init(pika_platform_thread_cond_t* cond);
  38. void pika_platform_thread_cond_destroy(pika_platform_thread_cond_t* cond);
  39. int pika_platform_thread_cond_signal(pika_platform_thread_cond_t* cond);
  40. int pika_platform_thread_cond_broadcast(pika_platform_thread_cond_t* cond);
  41. int pika_platform_thread_cond_timedwait(pika_platform_thread_cond_t* cond,
  42. Arg* timeout);
  43. #endif