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

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


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


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.



Return value



joinable() is false


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


// Run this code

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

  void foo()
      // simulate expensive operation

  void bar()
      // simulate expensive operation

  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;

      std::cout << "done!\n";


  starting first helper...
  starting second helper...
  waiting for helpers to finish...


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

      * 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)