January 30, 2003 PTHREAD_CREATE 3

### NAME

pthread_create - create a new thread

### LIBRARY

POSIX Thread Library (libpthread, -lpthread)

### SYNOPSIS

```int` pthread_create(```pthread_t * restrict thread``, const pthread_attr_t * restrict attr``, void *(*start_routine)(void *)``, void * restrict 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 attribute object pointed to 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(``) shall fail if:

[```EAGAIN`]
  The system lacks 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

fork(2), 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'') .