pthread_detach - detach a thread
The pthread_detach() function shall indicate to the implementation that storage for the thread thread can be reclaimed when that thread terminates. If thread has not terminated, pthread_detach() shall not cause it to terminate. The effect of multiple pthread_detach() calls on the same target thread is unspecified.
If the call succeeds, pthread_detach() shall return 0; otherwise, an error number shall be returned to indicate the error.
The pthread_detach() function may fail if:
- The implementation has detected that the value specified by thread does not refer to a joinable thread.
- No thread could be found corresponding to that specified by the given thread ID.
The pthread_detach() function shall not return an error code of [EINTR].
The pthread_join() or pthread_detach() functions should eventually be called for every thread that is created so that storage associated with the thread may be reclaimed.
It has been suggested that a "detach" function is not necessary; the detachstate thread creation attribute is sufficient, since a thread need never be dynamically detached. However, need arises in at least two cases:
In a cancellation handler for a pthread_join() it is nearly essential to have a pthread_detach() function in order to detach the thread on which pthread_join() was waiting. Without it, it would be necessary to have the handler do another pthread_join() to attempt to detach the thread, which would both delay the cancellation processing for an unbounded period and introduce a new call to pthread_join(), which might itself need a cancellation handler. A dynamic detach is nearly essential in this case.
In order to detach the "initial thread" (as may be desirable in processes that set up server threads).
pthread_join(), the Base Definitions volume of IEEE Std 1003.1-2001, <pthread.h>
First released in Issue 5. Included for alignment with the POSIX Threads Extension.
The pthread_detach() function is marked as part of the Threads option.
IEEE Std 1003.1-2001/Cor 2-2004, item XSH/TC2/D6/95 is applied, updating the ERRORS section so that the [EINVAL] and [ESRCH] error cases become optional.