std::jthread(3)
π NAME π
okay bestie π welcome to the C++ Standard Libary manual, section 3 β todayβs main character is std::jthread. The NAME line is literally std::jthread - std::jthread, no notes, periodt.
β¨ SYNOPSIS β¨
hereβs the exact synopsis, bestie β do not freestyle this part:
Defined in header <thread>
class jthread; (since C++20)
so what even is it? jthread is a class that represents a single thread of execution. It has the same general behavior as std::thread, except that jthread automatically rejoins on destruction, and it 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).
β οΈ fr fr: if that top-level function throws, std::terminate gets called. Thatβs the rule.
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. iconic, honestly.
πΈ Member types πΈ
member type β definition, lowkey table energy but in list form:
idβstd::thread::idnative_handle_type(optional*) βstd::thread::native_handle_type
π Member functions π
constructorβ constructs newjthreadobject(public member function)destructorβ if the thread is joinable, then a stop is requested and the thread joins(public member function)operator=β moves thejthreadobject(public member function)
π Observers π
joinableβ checks whether the thread is joinable, i.e. potentially running in parallel context(public member function)get_idβ returns the id of the thread(public member function)native_handleβ returns the underlying implementation-defined thread handle(public member function)hardware_concurrency[static]β returns the number of concurrent threads supported by the implementation(public static member function)
π Operations π
joinβ waits for the thread to finish its execution(public member function)detachβ permits the thread to execute independently from the thread handle(public member function)swapβ swaps twojthreadobjects(public member function)
π Stop token handling π
get_stop_sourceβ returns astop_sourceobject associated with the shared stop state of the thread(public member function)get_stop_tokenβ returns astop_tokenassociated with the shared stop state of the thread(public member function)request_stopβ requests execution stop via the shared stop state of the thread(public member function)
π Non-member functions π
swap(std::jthread)β specializes thestd::swapalgorithm(C++20)(function)
β Notes β
feature-test macro tea β:
__cpp_lib_jthreadβ value:201911L; Std:(C++20); feature: Stop token and joining thread
π¦ See also π¦
threadβ manages a separate thread(C++11)(class)
mwah π this page came from source/version http://cppreference.com, dated 2024.06.10, and itβs the std::jthread(3) page β bye bestie, go write some safe threads π
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms