lwp_pid.h 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /*
  2. * Copyright (c) 2006-2020, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2020-02-23 Jesven first version.
  9. */
  10. #ifndef LWP_PID_H__
  11. #define LWP_PID_H__
  12. #include "lwp.h"
  13. #ifdef __cplusplus
  14. extern "C" {
  15. #endif
  16. #define LWP_CREATE_FLAG_NONE 0x0000
  17. #define LWP_CREATE_FLAG_ALLOC_PID 0x0001 /* allocate pid on lwp object create */
  18. struct rt_lwp;
  19. struct lwp_avl_struct *lwp_get_pid_ary(void);
  20. int lwp_pid_init(void);
  21. void lwp_pid_put(struct rt_lwp *lwp);
  22. void lwp_pid_lock_take(void);
  23. void lwp_pid_lock_release(void);
  24. /**
  25. * @brief Create a new lwp object
  26. * This will initialize the member in the object and register to system.
  27. * Besides, a new pid is allocate with lwp
  28. *
  29. * @param flags control the property of the lwp object. Can be ORed with:
  30. * LWP_CREATE_FLAG_NONE: raw lwp object
  31. * LWP_CREATE_FLAG_ALLOC_PID: lwp object with specified pid
  32. *
  33. * @return struct rt_lwp* object
  34. */
  35. struct rt_lwp* lwp_create(rt_base_t flags);
  36. void lwp_free(struct rt_lwp* lwp);
  37. int lwp_ref_inc(struct rt_lwp *lwp);
  38. int lwp_ref_dec(struct rt_lwp *lwp);
  39. struct rt_lwp* lwp_from_pid_locked(pid_t pid);
  40. pid_t lwp_to_pid(struct rt_lwp* lwp);
  41. pid_t lwp_name2pid(const char* name);
  42. char* lwp_pid2name(int32_t pid);
  43. int lwp_getpid(void);
  44. pid_t lwp_waitpid(const pid_t pid, int *status, int options);
  45. pid_t waitpid(pid_t pid, int *status, int options);
  46. long list_process(void);
  47. void lwp_user_object_lock_init(struct rt_lwp *lwp);
  48. void lwp_user_object_lock_destroy(struct rt_lwp *lwp);
  49. void lwp_user_object_lock(struct rt_lwp *lwp);
  50. void lwp_user_object_unlock(struct rt_lwp *lwp);
  51. int lwp_user_object_add(struct rt_lwp *lwp, rt_object_t object);
  52. rt_err_t lwp_user_object_delete(struct rt_lwp *lwp, rt_object_t object);
  53. void lwp_user_object_clear(struct rt_lwp *lwp);
  54. void lwp_user_object_dup(struct rt_lwp *dst_lwp, struct rt_lwp *src_lwp);
  55. rt_inline struct rt_lwp *lwp_from_pid_and_lock(pid_t pid)
  56. {
  57. struct rt_lwp *lwp;
  58. lwp_pid_lock_take();
  59. lwp = lwp_from_pid_locked(pid);
  60. if (lwp)
  61. lwp_ref_inc(lwp);
  62. lwp_pid_lock_release();
  63. return lwp;
  64. }
  65. rt_inline void lwp_from_pid_release_lock(struct rt_lwp *lwp)
  66. {
  67. if (lwp)
  68. lwp_ref_dec(lwp);
  69. }
  70. void lwp_thread_exit(rt_thread_t thread, rt_base_t status);
  71. void lwp_exit(struct rt_lwp *lwp, rt_base_t status);
  72. #ifdef __cplusplus
  73. }
  74. #endif
  75. #endif