Namespaces
Variants
Views
Actions

std::jthread

From cppreference.com
< cpp‎ | thread
 
 
Concurrency support library
Threads
(C++11)
jthread
(C++20)
this_thread namespace
(C++11)
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
(C++11)
Generic lock management
(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)
Safe Reclamation
(C++26)
Hazard Pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11)(deprecated in C++20)
(C++11)(deprecated in C++20)
Memory ordering
Free functions for atomic operations
Free functions for atomic flags
 
 
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.

Contents

[edit] Member types

Member type Definition
id std::thread::id
native_handle_type (optional*) std::thread::native_handle_type[edit]

[edit] Member functions

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

[edit] Non-member functions

specializes the std::swap algorithm
(function) [edit]

[edit] Notes

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

[edit] See also

(C++11)
manages a separate thread
(class) [edit]