====== C - C++ Threads - Troubleshooting - Program Crashes - Forgetting to join a thread ====== Forgetting to join a thread or detach it (make it unjoinable) before the main program terminates, will cause in a program crash. For example, the t1 thread is not joined to the main thread. #include #include using namespace std; void HelloWorld() { cout << "Hello World" << endl; } int main() { thread t1(HelloWorld); //t1.join(); // If the thread is not joined to the main thread it will cause a crash. return 0; } **NOTE:** Why does it crash ??? * This is because, at the end of the main function, thread t1 goes out of scope and the thread destructor is called. * Inside the destructor, a check is performed to see if thread t1 is joinable. * A joinable thread is a thread that has not been detached. * If the thread is joinable, std::terminate is called. ---- ===== Resolution ===== There are two ways to fix this depending on your needs. ==== 1. Join the thread t1 to the main thread ==== int main() { thread t1(HelloWorld); t1.join(); // Join t1 to the main thread. return 0; } ---- ==== 2. Detach the thread t1 from the main thread and let it continue as a daemon thread ==== int main() { thread t1(HelloWorld); t1.detach(); // Detach t1 from main thread. return 0; } ----