假设我有一个正在堆栈上创建和分离的线程,如下所示:
void foo()
{
while(true){};
}
void runThread()
{
std::thread t(foo);
t.detach();
}
int main()
{
runThread();
}
该计划当然没有任何意义,但是在我们分离并退出runThred
之后会发生什么?它被分配在堆栈上,所以在我们退出t
之后基本上runThred
将被销毁,但是线程本身将继续运行而不管主线程是否已经分离。
这样一个例子中的最佳做法是在堆上创建它并在之后保存指向它的指针(dcor)吗?
或者如果t
变量被破坏并且我们应该“忽略”它,它意味着什么?
答案 0 :(得分:4)
std::thread
对象表示可以对其进行操作的线程的句柄。但是一旦你调用detach
,对象和实际的执行线程之间就没有连接。