std::jthread(3)

πŸ“¦
version 2024.07.05 Β· 3 versions
, in nixpkgs unstable, opensuse-leap 16.0

πŸŽ€ 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::id
  • native_handle_type (optional*) β€” std::thread::native_handle_type

πŸ’… Member functions πŸ’…

  • constructor β€” constructs new jthread object (public member function)
  • destructor β€” if the thread is joinable, then a stop is requested and the thread joins (public member function)
  • operator= β€” moves the jthread object (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 two jthread objects (public member function)

πŸ›‘ Stop token handling πŸ›‘

  • get_stop_source β€” returns a stop_source object associated with the shared stop state of the thread (public member function)
  • get_stop_token β€” returns a stop_token associated 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 the std::swap algorithm (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