std::jthread:: join
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Observers | ||||
| Operations | ||||
|
jthread::join
|
||||
| Stop token handling | ||||
| Non-member functions | ||||
|
void
join
(
)
;
|
(seit C++20) | |
Blockiert den aktuellen Thread, bis der durch * this identifizierte Thread seine Ausführung beendet.
Die Beendigung des durch
*
this
synchronisierten Threads
erfolgt mit der entsprechenden erfolgreichen Rückkehr von
join()
.
Es wird keine Synchronisierung auf * this selbst durchgeführt. Gleichzeitige Aufrufe von join ( ) auf dasselbe jthread-Objekt von mehreren Threads stellen einen Datenwettlauf dar, der zu undefiniertem Verhalten führt.
Inhaltsverzeichnis |
Parameter
(keine)
Rückgabewert
(keine)
Nachbedingungen
joinable() ist false .
Ausnahmen
std::system_error falls ein Fehler auftritt.
Fehlerbedingungen
- resource_deadlock_would_occur falls this - > get_id ( ) == std:: this_thread :: get_id ( ) (Deadlock erkannt).
- no_such_process falls der Thread nicht gültig ist.
- invalid_argument falls joinable() false ist.
Beispiel
#include <chrono> #include <iostream> #include <thread> void foo() { // simulate expensive operation std::this_thread::sleep_for(std::chrono::seconds(1)); } void bar() { // simulate expensive operation std::this_thread::sleep_for(std::chrono::seconds(1)); } int main() { std::cout << "starting first helper...\n"; std::jthread helper1(foo); std::cout << "starting second helper...\n"; std::jthread helper2(bar); std::cout << "waiting for helpers to finish..." << std::endl; helper1.join(); helper2.join(); std::cout << "done!\n"; }
Ausgabe:
starting first helper... starting second helper... waiting for helpers to finish... done!
Referenzen
- C++23-Standard (ISO/IEC 14882:2024):
-
- 33.4.4.3 Memberfunktionen [thread.jthread.mem]
- C++20-Standard (ISO/IEC 14882:2020):
-
- 32.4.3.2 Memberfunktionen [thread.jthread.mem]
Siehe auch
|
erlaubt dem Thread, unabhängig vom Thread-Handle ausgeführt zu werden
(öffentliche Member-Funktion) |
|
|
prüft, ob der Thread joinable ist, d.h. möglicherweise in parallelem Kontext läuft
(öffentliche Member-Funktion) |
|
|
C-Dokumentation
für
thrd_join
|
|