std::jthread:: join
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Observers | ||||
| Operations | ||||
|
jthread::join
|
||||
| Stop token handling | ||||
| Non-member functions | ||||
|
void
join
(
)
;
|
(depuis C++20) | |
Bloque le thread actuel jusqu'à ce que le thread identifié par * this termine son exécution.
L'achèvement du thread identifié par
*
this
se synchronise avec
le retour réussi correspondant de
join()
.
Aucune synchronisation n'est effectuée sur * this lui-même. L'appel concurrent de join ( ) sur le même objet jthread depuis plusieurs threads constitue une course aux données qui entraîne un comportement indéfini.
Table des matières |
Paramètres
(aucun)
Valeur de retour
(aucun)
Postconditions
joinable() est false .
Exceptions
std::system_error si une erreur se produit.
Conditions d'erreur
- resource_deadlock_would_occur si this - > get_id ( ) == std:: this_thread :: get_id ( ) (interblocage détecté).
- no_such_process si le thread n'est pas valide.
- invalid_argument si joinable() est false .
Exemple
#include <chrono> #include <iostream> #include <thread> void foo() { // simuler une opération coûteuse std::this_thread::sleep_for(std::chrono::seconds(1)); } void bar() { // simuler une opération coûteuse 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"; }
Sortie :
starting first helper... starting second helper... waiting for helpers to finish... done!
Références
- Norme C++23 (ISO/IEC 14882:2024) :
-
- 33.4.4.3 Membres [thread.jthread.mem]
- Norme C++20 (ISO/CEI 14882:2020) :
-
- 32.4.3.2 Membres [thread.jthread.mem]
Voir aussi
|
permet au thread de s'exécuter indépendamment du gestionnaire de thread
(fonction membre publique) |
|
|
vérifie si le thread est joignable, c'est-à-dire potentiellement en cours d'exécution dans un contexte parallèle
(fonction membre publique) |
|
|
Documentation C
pour
thrd_join
|
|