carta
thrd_join(3)

thrd_join3

C11 threads interface

Part of call_once(3).

Usage

void

int

void

int

int

int

int

void

int

int

int

int

int

int

thrd_t

int

int

_Noreturn void

int

int

void

int

void

void *

int

Library

library “libstdthreads”

Overview

As of ISO/IEC 9899:2011 (“ISO C11”), the C standard includes an API for writing multithreaded applications. Since POSIX.1 already includes a threading API that is used by virtually any multithreaded application, the interface provided by the C standard can be considered superfluous.

In this implementation, the threading interface is therefore implemented as a light-weight layer on top of existing interfaces. The functions to which these routines are mapped, are listed in the following table. Please refer to the documentation of the POSIX equivalent functions for more information.

FunctionPOSIX equivalent
call_once()pthread_once(3)
cnd_broadcast()pthread_cond_broadcast(3)
cnd_destroy()pthread_cond_destroy(3)
cnd_init()pthread_cond_init(3)
cnd_signal()pthread_cond_signal(3)
cnd_timedwait()pthread_cond_timedwait(3)
cnd_wait()pthread_cond_wait(3)
mtx_destroy()pthread_mutex_destroy(3)
mtx_init()pthread_mutex_init(3)
mtx_lock()pthread_mutex_lock(3)
mtx_timedlock()pthread_mutex_timedlock(3)
mtx_trylock()pthread_mutex_trylock(3)
mtx_unlock()pthread_mutex_unlock(3)
thrd_create()pthread_create(3)
thrd_current()pthread_self(3)
thrd_detach()pthread_detach(3)
thrd_equal()pthread_equal(3)
thrd_exit()pthread_exit(3)
thrd_join()pthread_join(3)
thrd_sleep()nanosleep(2)
thrd_yield()pthread_yield(3)
tss_create()pthread_key_create(3)
tss_delete()pthread_key_delete(3)
tss_get()pthread_getspecific(3)
tss_set()pthread_setspecific(3)

Differences with POSIX equivalents

The thrd_exit() function returns an integer value to the thread calling thrd_join(), whereas the pthread_exit() function uses a pointer.

The mutex created by mtx_init() can be of type mtx_plain or mtx_timed to distinguish between a mutex that supports mtx_timedlock(). This type can be or'd with mtx_recursive to create a mutex that allows recursive acquisition. These properties are normally set using pthread_mutex_init(Ns, 's) attr parameter.

Return values

If successful, the cnd_broadcast(), cnd_init(), cnd_signal(), cnd_timedwait(), cnd_wait(), mtx_init(), mtx_lock(), mtx_timedlock(), mtx_trylock(), mtx_unlock(), thrd_create(), thrd_detach(), thrd_equal(), thrd_join(), thrd_sleep(), tss_create() and tss_set() functions return thrd_success. Otherwise an error code will be returned to indicate the error.

The thrd_current() function returns the thread ID of the calling thread.

The tss_get() function returns the thread-specific data value associated with the given key. If no thread-specific data value is associated with key, then the value NULL is returned.

Errors

The cnd_init() and thrd_create() functions will fail if:

thrd_nomem

The system has insufficient memory.

The cnd_timedwait() and mtx_timedlock() functions will fail if:

thrd_timedout

The system time has reached or exceeded the time specified in ts before the operation could be completed.

The mtx_trylock() function will fail if:

thrd_busy

The mutex is already locked.

In all other cases, these functions may fail by returning general error code thrd_error.

History

  • FreeBSD 16.0-CURRENT (2026-10-27) to FreeBSD 13.3-RELEASE: the text shown here
  • FreeBSD 13.2-RELEASE to FreeBSD 13.0-RELEASE
  • FreeBSD 12.4-RELEASE
  • FreeBSD 12.3-RELEASE
  • FreeBSD 12.2-RELEASE
  • FreeBSD 12.1-RELEASE
  • FreeBSD 12.0-RELEASE
  • FreeBSD 11.4-RELEASE
  • FreeBSD 11.3-RELEASE
  • FreeBSD 11.2-RELEASE
  • FreeBSD 11.1-RELEASE
  • FreeBSD 11.0-RELEASE
  • FreeBSD 10.4-RELEASE
  • FreeBSD 10.3-RELEASE
  • FreeBSD 10.2-RELEASE
  • FreeBSD 10.1-RELEASE
  • FreeBSD 10.0-RELEASE

Standards

These functions are expected to conform to ISO/IEC 9899:2011 (“ISO C11”).

History

These functions appeared in FreeBSD 10.0.

Authors

Ed Schouten ⟨[email protected]⟩

From base 16.0-CURRENT-20261027-61c70dc16a79 in FreeBSD 16.0-CURRENT (2026-10-27). Parsed by carta from the page's mdoc source.