====== 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;
}
----