std::thread::join (3) - Linux Manuals

std::thread::join: std::thread::join

NAME

std::thread::join - std::thread::join

Synopsis


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 *this synchronizes with the corresponding successful return from join().
No synchronization is performed on *this itself. Concurrently calling join() on the same std::thread object from multiple threads constitutes a data race that results in undefined behavior.

Parameters


(none)

Return value


(none)

Postconditions


joinable() is false

Exceptions


std::system_error if an error occurs.

Error Conditions


* resource_deadlock_would_occur if this->get_id() == std::this_thread::get_id() (deadlock detected)
* no_such_process if the thread is not valid
* invalid_argument if joinable() is false

Example


// Run this code


  #include <iostream>
  #include <thread>
  #include <chrono>


  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::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!

References


* C++11 standard (ISO/IEC 14882:2011):


      * 30.3.1.5 thread members [thread.thread.member]

See also


         permits the thread to execute independently from the thread handle
detach (public member function)
         checks whether the thread is joinable, i.e. potentially running in parallel context
joinable (public member function)