pthread_internal.h 889 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #ifndef __PTHREAD_INTERNAL_H__
  2. #define __PTHREAD_INTERNAL_H__
  3. #include <rtthread.h>
  4. #include <pthread.h>
  5. struct _pthread_cleanup
  6. {
  7. void (*cleanup_func)(void* parameter);
  8. void* parameter;
  9. struct _pthread_cleanup* next;
  10. };
  11. typedef struct _pthread_cleanup _pthread_cleanup_t;
  12. #define PTHREAD_MAGIC 0x70746873
  13. struct _pthread_data
  14. {
  15. rt_uint32_t magic;
  16. pthread_attr_t attr;
  17. rt_thread_t tid;
  18. void* (*thread_entry)(void* parameter);
  19. void* thread_parameter;
  20. /* return value */
  21. void* return_value;
  22. /* semaphore for joinable thread */
  23. rt_sem_t joinable_sem;
  24. _pthread_cleanup_t* cleanup;
  25. void** tls; /* thread-local storage area */
  26. };
  27. typedef struct _pthread_data _pthread_data_t;
  28. rt_inline _pthread_data_t* _pthread_get_data(pthread_t thread)
  29. {
  30. RT_ASSERT(thread != RT_NULL);
  31. return (_pthread_data_t*)thread->user_data;
  32. }
  33. #endif