PTHREAD_CREATE(3) | Library Functions Manual | PTHREAD_CREATE(3)

# NAME

`pthread_create` — create a new thread

# SYNOPSIS

POSIX Threads Library (libpthread, -lpthread)
`#include <pthread.h>`

int
`pthread_create`(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);

# DESCRIPTION

The `pthread_create`() function is used to create a new thread, with attributes specified by attr, within a process. If attr is NULL, the default attributes are used. If the attributes specified by attr are modified later, the thread's attributes are not affected. Upon successful completion `pthread_create`() will store the ID of the created thread in the location specified by thread.

The thread is created executing start_routine with arg as its sole argument. If the start_routine returns, the effect is as if there was an implicit call to `pthread_exit`() using the return value of start_routine as the exit status. Note that the thread in which `main`() was originally invoked differs from this. When it returns from `main`(), the effect is as if there was an implicit call to `exit`() using the return value of `main`() as the exit status.

The signal state of the new thread is initialized as:

- The signal mask is inherited from the creating thread.
- The set of signals pending for the new thread is empty.

# RETURN VALUES

If successful, the `pthread_create`() function will return zero. Otherwise an error number will be returned to indicate the error.

# ERRORS

`pthread_create`() will fail if:

[`EAGAIN`]
  The system lacked the necessary resources to create another thread, or the system-imposed limit on the total number of threads in a process [PTHREAD_THREADS_MAX] would be exceeded.
[`EINVAL`]
  The value specified by attr is invalid.

# SEE ALSO

__tfork(3), pthread_attr_init(3), pthread_attr_setdetachstate(3), pthread_attr_setguardsize(3), pthread_attr_setstack(3), pthread_attr_setstackaddr(3), pthread_attr_setstacksize(3), pthread_cleanup_pop(3), pthread_cleanup_push(3), pthread_exit(3), pthread_join(3)

# STANDARDS

`pthread_create`() conforms to ISO/IEC 9945-1:1996 (“POSIX.1”).

June 7, 2025 | Debian