# pthread_tryjoin_np

## NAME



           pthread_tryjoin_np, pthread_timedjoin_np - try to join with a
           terminated thread
    


## LIBRARY



           POSIX threads library (_libpthread_ , _-lpthread_)
    


## SYNOPSIS



           **#define _GNU_SOURCE** /* See feature_test_macros(7) */
           **#include <pthread.h>**
    
           **int pthread_tryjoin_np(pthread_t** _thread_**, void ****_retval_**);**
           **int pthread_timedjoin_np(pthread_t** _thread_**, void ****_retval_**,**
                                    **const struct timespec ***_abstime_**);**
    


## DESCRIPTION



           These functions operate in the same way as pthread_join(3), except
           for the differences described on this page.
    
           The **pthread_tryjoin_np**() function performs a nonblocking join with
           the thread _thread_ , returning the exit status of the thread in
           _*retval_.  If _thread_ has not yet terminated, then instead of
           blocking, as is done by pthread_join(3), the call returns an
           error.
    
           The **pthread_timedjoin_np**() function performs a join-with-timeout.
           If _thread_ has not yet terminated, then the call blocks until a
           maximum time, specified in _abstime_ , measured against the
           **CLOCK_REALTIME** clock.  If the timeout expires before _thread_
           terminates, the call returns an error.  The _abstime_ argument is a
           **timespec**(3) structure, specifying an absolute time measured since
           the Epoch (see time(2)).
    


## RETURN VALUE



           On success, these functions return 0; on error, they return an
           error number.
    


## ERRORS



           These functions can fail with the same errors as pthread_join(3).
           **pthread_tryjoin_np**() can in addition fail with the following
           error:
    
           **EBUSY** _thread_ had not yet terminated at the time of the call.
    
           **pthread_timedjoin_np**() can in addition fail with the following
           errors:
    
           **EINVAL** _abstime_ value is invalid (_tv_sec_ is less than 0 or _tv_nsec_
                  is greater than 1e9).
    
           **ETIMEDOUT**
                  The call timed out before _thread_ terminated.
    
           **pthread_timedjoin_np**() never returns the error **EINTR**.
    


## ATTRIBUTES



           For an explanation of the terms used in this section, see
           attributes(7).
           ┌──────────────────────────────────────┬───────────────┬─────────┐
           │ **Interface** │ **Attribute** │ **Value** │
           ├──────────────────────────────────────┼───────────────┼─────────┤
           │ **pthread_tryjoin_np**(),                │ Thread safety │ MT-Safe │
           │ **pthread_timedjoin_np**()               │               │         │
           └──────────────────────────────────────┴───────────────┴─────────┘
    


## STANDARDS



           GNU; hence the suffix "_np" (nonportable) in the names.
    


## BUGS



           The **pthread_timedjoin_np**() function measures time by internally
           calculating a relative sleep interval that is then measured
           against the **CLOCK_MONOTONIC** clock instead of the **CLOCK_REALTIME**
           clock.  Consequently, the timeout is unaffected by discontinuous
           changes to the **CLOCK_REALTIME** clock.
    


## EXAMPLES



           The following code waits to join for up to 5 seconds:
    
               struct timespec ts;
               int s;
    
               ...
    
               if (clock_gettime(CLOCK_REALTIME, &ts) == -1) {
                   /* Handle error */
               }
    
               ts.tv_sec += 5;
    
               s = pthread_timedjoin_np(thread, NULL, &ts);
               if (s != 0) {
                   /* Handle error */
               }
    


* * *