Copyright Digital Equipment Corp. All rights reserved.

Description

   This routine terminates the calling thread and makes a status
   value (value_ptr) available to any thread that calls pthread_
   join() and specifies the terminating thread.

   Any cleanup handlers that have been pushed and not yet popped
   from the stack are popped in the reverse order that they were
   pushed and then executed. After all cleanup handlers have been
   executed, appropriate destructor functions are called in an
   unspecified order if the thread has any thread-specific data.
   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()
   routine that may exist.

   The Threads Library issues an implicit call to pthread_exit()
   when a thread returns from the start routine that was used to
   create it. The Threads Library writes the function's return value
   as the return value in the thread's thread object. The process
   exits when the last running thread calls pthread_exit().

   After a thread has terminated, the result of access to local
   (that is, explicitly or implicitly declared auto) variables
   of the thread is undefined. So, do not use references to local
   variables of the existing thread for the value_ptr argument of
   the pthread_exit() routine.