The thr_exit() function terminates the calling
thread, in a similar way that exit(3C)
terminates the calling process. If the calling thread is not detached, then
the thread's ID and the exit status specified
by status are retained. The value status is then made available to any successful join with
the terminating thread (see thr_join(3THR));
otherwise, status is disregarded allowing the
thread's ID to be reclaimed immediately.
Any cancellation cleanup handlers that have been pushed and not yet
popped are popped in the reverse order that they were pushed and then executed.
After all cancellation cleanup handlers have been executed, if the thread
has any thread-specific data, appropriate destructor functions will be called
in an unspecified order. Thread termination does not release any application
visible process resources,including, but not limited to, mutexes and file
descriptors, nor does it perform any process level cleanup actions, including,
but not limited to, calling any atexit() routines that
may exist.
If any thread, including the main() thread, calls thr_exit(), only that thread will exit.
If main() returns or exits (either implicitly or
explicitly), or any thread explicitly calls exit(), the
entire process will exit.
The behavior of thr_exit() is undefined if called
from a cancellation cleanup handler or destructor function that was invoked
as a result of either an implicit or explicit call to thr_exit().
After a thread has terminated, the result of access to local (auto)
variables of the thread is undefined. Thus, references to local variables
of the exiting thread should not be used for the thr_exit() status parameter value.
If any thread (except the main() thread) implicitly
or explicitly returns, the result is the same as if the thread called thr_exit() and it will return the value of status as the exit code.
The process will terminate with an exit status of 0
after the last non-daemon thread has terminated (including the main() thread). This behavior is the same as if the application
had called exit() with a 0 argument
at thread termination time.
|