I have the following code snippet:
#include <thread>
int main(){
std::thread trial([](){ return 2;});
//trial.join()
return 0;
}
From this I get the following output:
terminate called without an active exception
[1] 17963 abort (core dumped) ./a.out
Now, this doesn't happen when I call .join()
after I create the thread. As far as I know, .join()
waits until the execution of the thread ends. However, it also seems to prevent abort from happening. Could somebody explain what's going on?
Could somebody explain what's going on?
From the documentation of the destructor of std::thread
:
If *this has an associated thread (joinable() == true),
std::terminate()
is called.
In the example, you failed to join the thread, therefore it is joinable when it is destroyed, therefore the process std::terminate()
is called. By default std::terminate()
calls std::abort
.
If you do join, then after the join, the thread will not be joinable. Therefore std::terminate()
will not be called upon the destruction.