The GNU C Library implements a set of functions that allow the user to easily create and use threads. Additional functionality is provided to control the behavior of threads.
The following data types are defined for managing threads:
A unique object that identifies a thread.
This data type is an int (*) (void *) typedef that is passed to
thrd_create when creating a new thread. It should point to the
first function that thread will run.
The following functions are used for working with threads:
int thrd_create (thrd_t *thr, thrd_start_t func, void *arg) ¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
thrd_create creates a new thread that will execute the function
func. The object pointed to by arg will be used as the
argument to func. If successful, thr is set to the new
thread identifier.
This function may return thrd_success, thrd_nomem, or
thrd_error.
thrd_t thrd_current (void) ¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
This function returns the identifier of the calling thread.
int thrd_equal (thrd_t lhs, thrd_t rhs) ¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
thrd_equal checks whether lhs and rhs refer to the
same thread. If lhs and rhs are different threads, this
function returns 0; otherwise, the return value is non-zero.
int thrd_sleep (const struct timespec *time_point, struct timespec *remaining) ¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
thrd_sleep blocks the execution of the current thread for at
least until the elapsed time pointed to by time_point has been
reached. This function does not take an absolute time, but a duration
that the thread is required to be blocked. See Time Basics, and
Time Types.
The thread may wake early if a signal that is not ignored is received.
In such a case, if remaining is not NULL, the remaining time
duration is stored in the object pointed to by
remaining.
thrd_sleep returns 0 if it blocked for at least the
amount of time in time_point, -1 if it was interrupted
by a signal, or a negative number on failure.
void thrd_yield (void) ¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
thrd_yield provides a hint to the implementation to reschedule
the execution of the current thread, allowing other threads to run.
_Noreturn void thrd_exit (int res) ¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
thrd_exit terminates execution of the calling thread and sets
its result code to res.
If this function is called from a single-threaded process, the call is
equivalent to calling exit with EXIT_SUCCESS
(see Normal Termination). Also note that returning from a
function that started a thread is equivalent to calling
thrd_exit.
int thrd_detach (thrd_t thr) ¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
thrd_detach detaches the thread identified by thr from
the current control thread. The resources held by the detached thread
will be freed automatically once the thread exits. The parent thread
will never be notified by any thr signal.
Calling thrd_detach on a thread that was previously detached or
joined by another thread results in undefined behavior.
This function returns either thrd_success or thrd_error.
int thrd_join (thrd_t thr, int *res) ¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
thrd_join blocks the current thread until the thread identified
by thr finishes execution. If res is not NULL, the
result code of the thread is put into the location pointed to by
res. The termination of the thread synchronizes-with the
completion of this function, meaning both threads have arrived at a
common point in their execution.
Calling thrd_join on a thread that was previously detached or
joined by another thread results in undefined behavior.
This function returns either thrd_success or thrd_error.