可以执行以下操作吗?
#include <iostream>
#include <thread>
std::thread th;
void foo()
{
std::cout << __func__ << std::endl;
th = std::thread(foo);
}
int main()
{
th = std::thread(foo);
th.join();
}
gcc崩溃 - http://coliru.stacked-crooked.com/a/3c926507ab0f8a5c。
我知道几乎没有必要这样做,但我想知道答案只是出于学术目的。
答案 0 :(得分:4)
th = std::thread(foo);
你没有加入你的主题。
http://en.cppreference.com/w/cpp/thread/thread
破坏线程对象,底层线程必须加入或分离
如另一个答案的评论中所述,赋值与销毁具有相同的要求,因为前一个线程对象丢失了。