summaryrefslogtreecommitdiff
path: root/linuxthreads/man/pthread_join.man
blob: d58709384102333f0e7151e7dbd28ae1809e928d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
.TH PTHREAD_JOIN 3 LinuxThreads

.SH NAME
pthread_join \- wait for termination of another thread

.SH SYNOPSIS
#include <pthread.h>

int pthread_join(pthread_t th, void **thread_return);

.SH DESCRIPTION
!pthread_join! suspends the execution of the calling thread until the
thread identified by |th| terminates, either by calling !pthread_exit!(3)
or by being cancelled.

If |thread_return| is not !NULL!, the return value of |th| is stored
in the location pointed to by |thread_return|.  The return value of
|th| is either the argument it gave to !pthread_exit!(3), or
!PTHREAD_CANCELED! if |th| was cancelled.

The joined thread !th! must be in the joinable state: it must not have
been detached using !pthread_detach!(3) or the
!PTHREAD_CREATE_DETACHED! attribute to !pthread_create!(3).

When a joinable thread terminates, its memory resources (thread
descriptor and stack) are not deallocated until another thread
performs !pthread_join! on it. Therefore, !pthread_join! must be
called once for each joinable thread created to avoid memory leaks.

At most one thread can wait for the termination of a given
thread. Calling !pthread_join! on a thread |th| on which another
thread is already waiting for termination returns an error.

.SH CANCELLATION

!pthread_join! is a cancellation point. If a thread is canceled while
suspended in !pthread_join!, the thread execution resumes immediately
and the cancellation is executed without waiting for the |th| thread
to terminate. If cancellation occurs during !pthread_join!, the |th|
thread remains not joined.

.SH "RETURN VALUE"
On success, the return value of |th| is stored in the location pointed
to by |thread_return|, and 0 is returned. On error, a non-zero error
code is returned.

.SH ERRORS
.TP
!ESRCH!
No thread could be found corresponding to that specified by |th|.
.TP
!EINVAL!
The |th| thread has been detached.
.TP
!EINVAL!
Another thread is already waiting on termination of |th|.
.TP
!EDEADLK!
The |th| argument refers to the calling thread.

.SH AUTHOR
Xavier Leroy <Xavier.Leroy@inria.fr>

.SH "SEE ALSO"
!pthread_exit!(3),
!pthread_detach!(3),
!pthread_create!(3),
!pthread_attr_setdetachstate!(3),
!pthread_cleanup_push!(3),
!pthread_key_create!(3).