c:c_threads:troubleshooting:program_crashes:forgetting_to_join_a_thread
Table of Contents
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 <iostream> #include <thread> 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; }
c/c_threads/troubleshooting/program_crashes/forgetting_to_join_a_thread.txt · Last modified: 2021/06/07 08:58 by peter