summaryrefslogtreecommitdiffstats
path: root/docs/nspr/reference/pr_jointhread.rst
blob: a1bfddf81c46df2a04c2038629a27085af5f7994 (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
PR_JoinThread
=============

Blocks the calling thread until a specified thread terminates.


Syntax
------

.. code::

   #include <prthread.h>

   PRStatus PR_JoinThread(PRThread *thread);


Parameter
~~~~~~~~~

:ref:`PR_JoinThread` has the following parameter:

``thread``
   A valid identifier for the thread that is to be joined.


Returns
~~~~~~~

The function returns one of the following values:

-  If successful, ``PR_SUCCESS``
-  If unsuccessful--for example, if no joinable thread can be found that
   corresponds to the specified target thread, or if the target thread
   is unjoinable--``PR_FAILURE``.


Description
-----------

:ref:`PR_JoinThread` is used to synchronize the termination of a thread.
The function is synchronous in that it blocks the calling thread until
the target thread is in a joinable state. :ref:`PR_JoinThread` returns to
the caller only after the target thread returns from its root function.

:ref:`PR_JoinThread` must not be called until after :ref:`PR_CreateThread` has
returned.  If :ref:`PR_JoinThread` is not called on the same thread as
:ref:`PR_CreateThread`, then it is the caller's responsibility to ensure
that :ref:`PR_CreateThread` has completed.

Several threads cannot wait for the same thread to complete. One of the
calling threads operates successfully, and the others terminate with the
error ``PR_FAILURE``.

The calling thread is not blocked if the target thread has already
terminated.

:ref:`PR_JoinThread` is interruptible.