|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
void join(); | (since C++11) | |
Blocks the current thread until the thread identified by*this finishes its execution.
The completion of the thread identified by*thissynchronizes with the corresponding successful return fromjoin().
No synchronization is performed on*this itself. Concurrently callingjoin() on the same thread object from multiple threads constitutes a data race that results in undefined behavior.
Contents |
(none)
(none)
joinable() isfalse.
std::system_error if an error occurs.
#include <chrono>#include <iostream>#include <thread> void foo(){// simulate expensive operationstd::this_thread::sleep_for(std::chrono::seconds(1));} void bar(){// simulate expensive operationstd::this_thread::sleep_for(std::chrono::seconds(1));} int main(){std::cout<<"starting first helper...\n";std::thread helper1(foo); std::cout<<"starting second helper...\n";std::thread helper2(bar); std::cout<<"waiting for helpers to finish..."<<std::endl; helper1.join(); helper2.join(); std::cout<<"done!\n";}
Output:
starting first helper...starting second helper...waiting for helpers to finish...done!
| permits the thread to execute independently from the thread handle (public member function)[edit] | |
| checks whether the thread is joinable, i.e. potentially running in parallel context (public member function)[edit] | |
C documentation forthrd_join | |