pthread.cpp 687 B

123456789101112131415161718192021222324252627282930
  1. #include <AK/StdLibExtras.h>
  2. #include <Kernel/Syscall.h>
  3. #include <pthread.h>
  4. #include <unistd.h>
  5. extern "C" {
  6. int pthread_create(pthread_t* thread, pthread_attr_t* attributes, void* (*start_routine)(void*), void* argument_to_start_routine)
  7. {
  8. if (!thread)
  9. return -EINVAL;
  10. UNUSED_PARAM(attributes);
  11. int rc = create_thread(start_routine, argument_to_start_routine);
  12. if (rc < 0)
  13. return rc;
  14. *thread = rc;
  15. return 0;
  16. }
  17. void pthread_exit(void* value_ptr)
  18. {
  19. exit_thread(value_ptr);
  20. }
  21. int pthread_join(pthread_t thread, void** exit_value_ptr)
  22. {
  23. int rc = syscall(SC_join_thread, thread, exit_value_ptr);
  24. __RETURN_WITH_ERRNO(rc, rc, -1);
  25. }
  26. }