std::jthread

From cppreference.com
< cpp‎ | thread
 
 
Concurrency support library
Threads
(C++11)
jthread
(C++20)
(C++20)
this_thread namespace
(C++11)
(C++11)
(C++11)
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11)(deprecated in C++20)
(C++11)(deprecated in C++20)
Free functions for atomic operations
Free functions for atomic flags
Memory ordering
Mutual exclusion
(C++11)
Generic lock management
(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
(C++11)
(C++11)
Condition variables
(C++11)
Semaphores
Latches and barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
(C++11)
 
 
Defined in header <thread>
class jthread;
(since C++20)

The class jthread represents a single thread of execution. It has the same general behavior as std::thread, except that jthread automatically rejoins on destruction, and can be cancelled/stopped in certain situations.

Threads begin execution immediately upon construction of the associated thread object (pending any OS scheduling delays), starting at the top-level function provided as a constructor argument. The return value of the top-level function is ignored and if it terminates by throwing an exception, std::terminate is called. The top-level function may communicate its return value or an exception to the caller via std::promise or by modifying shared variables (which may require synchronization, see std::mutex and std::atomic).

Unlike std::thread, the jthread logically holds an internal private member of type std::stop_source, which maintains a shared stop-state. The jthread constructor accepts a function that takes a std::stop_token as its first argument, which will be passed in by the jthread from its internal std::stop_source. This allows the function to check if stop has been requested during its execution, and return if it has.

std::jthread objects may also be in the state that does not represent any thread (after default construction, move from, detach, or join), and a thread of execution may be not associated with any jthread objects (after detach).

No two std::jthread objects may represent the same thread of execution; std::jthread is not CopyConstructible or CopyAssignable, although it is MoveConstructible and MoveAssignable.

Member types

Member type Definition
id std::thread::id
native_handle_type(not always present) std::thread::native_handle_type

Member functions

constructs new jthread object
(public member function)
if the thread is joinable, then a stop is requested and the thread joins
(public member function)
moves the jthread object
(public member function)
Observers
checks whether the thread is joinable, i.e. potentially running in parallel context
(public member function)
returns the id of the thread
(public member function)
returns the underlying implementation-defined thread handle
(public member function)
returns the number of concurrent threads supported by the implementation
(public static member function)
Operations
waits for the thread to finish its execution
(public member function)
permits the thread to execute independently from the thread handle
(public member function)
swaps two jthread objects
(public member function)
Stop token handling
returns a stop_source object associated with the shared stop state of the thread
(public member function)
returns a stop_token associated with the shared stop state of the thread
(public member function)
requests execution stop via the shared stop state of the thread
(public member function)

Non-member functions

specializes the std::swap algorithm
(function)

Notes

Feature-test macro Value Std Comment
__cpp_lib_jthread 201911L (C++20) Stop token and joining thread

See also

(C++11)
manages a separate thread
(class)