Reputation: 706
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?
Upvotes: 0
Views: 2700
Reputation: 238291
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.
Upvotes: 5