Namespaces
Variants

std:: jthread

From cppreference.net
Concurrency support library
Threads
(C++11)
jthread
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
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
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
Definiert im Header <thread>
class jthread ;
(seit C++20)

Die Klasse jthread repräsentiert einen einzelnen Ausführungsstrang . Sie weist dasselbe allgemeine Verhalten auf wie std::thread , mit der Ausnahme, dass jthread bei der Zerstörung automatisch wieder beitritt und in bestimmten Situationen abgebrochen/gestoppt werden kann.

Threads beginnen die Ausführung unmittelbar nach der Konstruktion des zugehörigen Thread-Objekts (vorbehaltlich eventueller Betriebssystem-Scheduling-Verzögerungen), beginnend mit der Top-Level-Funktion, die als Konstruktorargument bereitgestellt wird. Der Rückgabewert der Top-Level-Funktion wird ignoriert, und falls sie durch Werfen einer Exception terminiert, wird std::terminate aufgerufen. Die Top-Level-Funktion kann ihren Rückgabewert oder eine Exception an den Aufrufer über std::promise oder durch Modifizieren gemeinsamer Variablen kommunizieren (was Synchronisation erfordern kann, siehe std::mutex und std::atomic ).

Im Gegensatz zu std::thread besitzt der jthread logisch ein internes privates Mitglied vom Typ std::stop_source , das einen gemeinsamen Stopp-Zustand verwaltet. Der jthread -Konstruktor akzeptiert eine Funktion, die ein std::stop_token als erstes Argument erwartet, das vom jthread aus seiner internen std::stop_source übergeben wird. Dies ermöglicht der Funktion zu prüfen, ob während ihrer Ausführung ein Stopp angefordert wurde, und gegebenenfalls zurückzukehren.

std::jthread Objekte können sich auch im Zustand befinden, der keinen Thread repräsentiert (nach Default-Konstruktion, Move-Operation, detach , oder join ), und ein Ausführungsthread kann keinem jthread Objekt zugeordnet sein (nach detach ).

Keine zwei std::jthread Objekte dürfen denselben Ausführungsstrang repräsentieren; std::jthread ist nicht CopyConstructible oder CopyAssignable , obwohl es MoveConstructible und MoveAssignable ist.

Inhaltsverzeichnis

Mitgliedertypen

Mitgliedertyp Definition
id std::thread::id
native_handle_type ( optional* ) std::thread::native_handle_type

Memberfunktionen

konstruiert neues jthread Objekt
(öffentliche Member-Funktion)
falls der Thread joinable ist, wird ein Stop angefordert und der Thread gejoint
(öffentliche Member-Funktion)
verschiebt das jthread Objekt
(öffentliche Member-Funktion)
Observer
prüft ob der Thread joinable ist, d.h. potentiell in parallelem Kontext läuft
(öffentliche Member-Funktion)
gibt die id des Threads zurück
(öffentliche Member-Funktion)
gibt das zugrundeliegende implementierungsdefinierte Thread-Handle zurück
(öffentliche Member-Funktion)
gibt die Anzahl der von der Implementierung unterstützten nebenläufigen Threads zurück
(öffentliche statische Member-Funktion)
Operationen
wartet auf das Beenden der Thread-Ausführung
(öffentliche Member-Funktion)
erlaubt dem Thread die unabhängige Ausführung vom Thread-Handle
(öffentliche Member-Funktion)
tauscht zwei jthread Objekte
(öffentliche Member-Funktion)
Stop-Token-Behandlung
gibt ein stop_source Objekt zurück, das mit dem gemeinsamen Stop-Zustand des Threads assoziiert ist
(öffentliche Member-Funktion)
gibt ein stop_token zurück, das mit dem gemeinsamen Stop-Zustand des Threads assoziiert ist
(öffentliche Member-Funktion)
fordert Ausführungsstop über den gemeinsamen Stop-Zustand des Threads an
(öffentliche Member-Funktion)

Nicht-Member-Funktionen

spezialisiert den std::swap Algorithmus
(Funktion)

Hinweise

Feature-Test Makro Wert Std Feature
__cpp_lib_jthread 201911L (C++20) Stop-Token und Joining-Thread

Siehe auch

(C++11)
verwaltet einen separaten Thread
(Klasse)